tcp三次握手后如何,传输数据

疯魔症 疯魔症 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
情况是这样的,单片机用cp2200芯片实现tcp协议和服务器(上位机)通讯,现在服务器用tcp协议连接成功。
这里我要发一个电压值给单片机,单片机收到后返回一个OK(这里可能不是很合理)。
现在网络抓包,tcp三次握手都有,我发送数据也有,然后单片机返回一个应答,接着返回数据OK,这些抓包都有,
但是我这边没有得到返回的OK,read到的数据长是0.
下面是代码,我这里发送数据的同时,是不是也要开个监听的线程。
用的C#下tcpClient
  
static TcpClient m_tcpClient;
static Thread m_readThread = null;

/// <summary>
/// tcp 连接 发送数据
/// </summary>
/// <param name="strIp"></param>
/// <returns></returns>
public static string CommunicateTcp()
{

try
{
int Port = 80;//目标端口
string Ip = "192.168.1.50";//目标ip
IPAddress address = IPAddress.Parse(Ip);

IPAddress myIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; //得到本机ip

int myPort = 6010;//本机使用端口

IPEndPoint localEndPoint = new IPEndPoint(myIp, myPort);

m_tcpClient = new TcpClient(localEndPoint);

m_tcpClient.Connect(address, Port);

if (m_readThread == null)
{
m_readThread = new Thread(ReceiveDataThread);
}
m_readThread.Start();



NetworkStream ns = m_tcpClient.GetStream();

if (true)
{
byte[] bytes = new byte[10];//建立缓冲区
bytes[0] = Convert.ToByte('L');
bytes[1] = Convert.ToByte('V');
bytes[2] = Convert.ToByte('S');
bytes[3] = Convert.ToByte('P');

bytes[4] = Convert.ToByte('=');

bytes[5] = Convert.ToByte('0');
bytes[6] = Convert.ToByte('0');
bytes[7] = Convert.ToByte('0');
bytes[8] = Convert.ToByte('0');

bytes[9] = Convert.ToByte('\0');


// 创建跟ups连接的socket
Socket ups_sok = m_tcpClient.Client;// new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

//// 接收远程UPS控制器的反馈数据
//IPEndPoint senderEP = new IPEndPoint(IPAddress.Any, 2353);
//// 按照msdn的要求binding,此时我们作为服务端收数据。
//ups_sok.Bind(senderEP);
ups_sok.ReceiveTimeout = 15000;

byte[] buffer = new Byte[256];

// 发送数据到远程UPS控制器
ns.Write(bytes, 0, bytes.Length);

ups_sok.Receive(buffer);

byte[] data = new byte[5];

int bytesRead = ns.Read(data, 0, data.Length);//读取字节流
}

ns.Close();

m_tcpClient.Close();
}
catch (System.Exception e)
{
string strError = "发送失败:" + e.Message;
return strError;
}

return "连接成功";
}

/// <summary>
/// 接收数据线程
/// </summary>
public static void ReceiveDataThread()
{
Byte [] ReciveData = new Byte[1024];

int len = 0;
if (m_readThread ==null)
{
return;
}
bool _Continue = true;
NetworkStream stream;
int count;
while (_Continue)
{
if (m_tcpClient.Connected)
stream = m_tcpClient.GetStream();
else
{
Thread.Sleep(50);
continue;
}

try
{
len = stream.Read(ReciveData, 0, ReciveData.Length);
if (len != 0)
{
_Continue = false;
}
}

catch (Exception err)
{

CloseClientSocket();
}
}
}


...全文
评论 15
收藏 已收藏
分享
返回顶部
疯魔症
网络编程 18,356 成员 64,161 内容