tcp三次握手后如何,传输数据
情况是这样的,单片机用cp2200芯片实现tcp协议和服务器(上位机)通讯,现在服务器用tcp协议连接成功。
这里我要发一个电压值给单片机,单片机收到后返回一个OK(这里可能不是很合理)。
现在网络抓包,tcp三次握手都有,我发送数据也有,然后单片机返回一个应答,接着返回数据OK,这些抓包都有,
但是我这边没有得到返回的OK,read到的数据长是0.
下面是代码,我这里发送数据的同时,是不是也要开个监听的线程。
用的C#下tcpClient
这里我要发一个电压值给单片机,单片机收到后返回一个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();
}
}
}
...全文
相关推荐
TCP第三次握手传数据过程图解
这是因为此时连接已经建立,客户端可以开始传输数据。这一特性使得TCP能够有效地利用网络资源,避免了不必要的延迟。
用Wireshark研究TCP三次握手
当这个确认段被服务器接收后,三次握手完成,双方可以开始传输数据。这是握手过程的第三个步骤。
wireshark抓包分析tcp三次握手四次挥手详解及网络命令
**选项字段**:长度可变,用于扩展TCP的功能。##### (三)TCP三次握手TCP三次握手是建立TCP连接的过程,具体步骤如下:1.
tcp三次握手协议
第三次握手:客户端收到服务器的SYN+ACK响应后,再发送一个仅带有ACK标志的数据包,确认编号为服务器的序列编号加一。至此,TCP连接建立完成,双方可以开始传输数据。
三次握手协议的原理及实现
TCP在传输数据时,使用了序列号和确认号来保证数据的有序性和完整性。


网络编程
