TCP协议本身就不支持设置不粘包,要么改接收端代码拆包,要么改接收端代码告诉发送端已接收数据,要么发送端两次发送间隔够长,要么每发一次建一个连接 如果每发一次建一个连接不适用于你这个情况,那就只能让两次发送间隔时间足够长才行了
对性能要求不高的话,可以每发送一次建一次连接,笨办法
[quote=引用 4 楼 sp1234 的回复:] 接收端开发时有bug、连粘包都不知道?你确定是对方的bug?
对性能要求不高的话,可以每发送一次建一次连接,笨办法 List<string> datas = new List<string>(); datas.Add("abc"); datas.Add("123"); datas.Add("456"); datas.Add("zzz"); datas.Add("over"); foreach (string data in datas) { IPAddress ip = IPAddress.Parse("127.0.0.1"); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(new IPEndPoint(ip, int.Parse("8989"))); socket.Send(Encoding.Default.GetBytes(data)); socket.Close(); } Console.WriteLine("send finish!"); Console.ReadKey();
接收端开发时有bug、连粘包都不知道?你确定是对方的bug?
解黏包啊。。。 写一个结束标志,比如127 127 127 127四联,则认为是一个包结束了 接受一个byte[] b1,还要有一个存放不完整包的byte[] b2 接到一串byte[],先判断是否有结束标志,有则取b2再加上b1结束标志之前的内容为一个完整包,然后把结束标志之后的内容放到b2 如果没有结束标志,则把本次接收内容放到b2的末尾
[quote=引用 6 楼 owlgame 的回复:] 对性能要求不高的话,可以每发送一次建一次连接,笨办法
110,536
社区成员
642,578
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧