ClientServerSocketC#我正在使用socketC#。我已经使用套接字实现了客户端服务器应用程序,但问题是客户端没有收到服务器发送的所有数据。这是客户端应用程序代码。我应该怎么做才能收到服务器发送的所有数据?strRecieved="";Socketsoc=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPEndPointendPoint=newIPEndPoint(IPAddress.Parse("127.0.0.1"),9001);soc.Connect(endPoint);byte[]msgBuffer=Encoding.Default.GetBytes(路径);soc.Send(msgBuffer,0,msgBuffer.Length,0);byte[]buffer=newbyte[2000];intrec=soc.Receive(buffer);strRecieved=String.Format(Encoding.Default.GetString(buffer));首先。如果您正在实现某种流式传输功能(tcp/udp/文件),您应该考虑使用某种协议。什么是协议?这只是流式传输数据时使用的方案。示例:[4Bytes–length][lengthBytes–message][1Byte–terminationindicator]了解协议后,您可以简单地读取所有传入的字节:byte[]buffer=newbyte[4];stream.ReadBytes(缓冲区,0,4);//将其转换为int并读取其余部分intpacketLen=BitConverter.ToInt32(buffer,0);缓冲区=新字节[packetLen];stream.ReadBytes(buffer,0,buffer.Length);//发送的所有字节请记住,在发送消息之前,您必须从长度中减去4个字节。编辑:关于如何使用共享协议发送和接收数据的简单示例。//sender.csstring_stringToSend="somefancystring";byte[]encodedString=Encoding.UTF8.GetBytes(_stringToSend);列表缓冲区=newList();buffer.AddRange(BitConverter.GetBytes(encodedString.Length));buffer.AddRange(encodedString);netStream.WriteBytes(buffer.ToArray(),0,buffer.Count);//netStream以协议[@LEN-4Bytes][@MSG-@LENBytes]发送消息//简单来说就是:5ABCDE//receiver.csbyte[]buffer=newbyte[sizeof(int)];netStream.ReadBytes(buffer,0,buffer.Length);//接收者得到消息的长度,例如。5intdataLen=BitConverter.ToInt32(buffer,0);缓冲区=新字节[dataLen];//现在我们可以读取一条实际消息,因为我们知道它的长度netStream.ReadBytes(buffer,0,buffer.Length);字符串receivedString=Encoding.UTF8。获取字符串(缓冲区);//接收到的字符串等于“somefancystring”以使其更简单这种技术迫使您使用所需的协议,在本例中为:前4个字节sizeof(int)表示传入数据包长度每个字节都是您的数据包,直到结束。所以你现在应该创建ProtocolHelper对象:publicstaticclassProtocolHelper{publicbyte[]PackIntoProtocol(stringmessage){Listresult=newList();byte[]messageBuffer=Encoding.UTF8.GetBytes(消息);结果.AddRange(BitConverter.GetBytes(messageBuffer.Length),0);//这是协议的第一部分(消息的长度)result.AddRange(messageBuffer);//这是实际的消息returnresult.ToArray();}publicstringUnpackProtocol(byte[]buffer){returnEncoding.UTF8.GetString(buffer,0,buffer.Length);现在(取决于您选择从网络读取的方法),您必须发送和接收消息。以上就是C#学习教程:ClientServerSocketC#分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—//sender.csstringmeMessage="networkmessage1";byte[]buffer=ProtocolHelper.PackIntoProtocol(meMessage);socket.Send(缓冲区,0,缓冲区.Length,0);//receiver.csstringmessage=string.Empty;byte[]buffer=newbyte[sizeof(int)];//或者简单的newbyte[4];intreceived=socket.Receive(buffer);if(received==sizeof(int)){intpacketLen=BitConverter.ToInt32(buffer);//消息缓冲区的大小=newbyte[packetLen];received=socket.Receive(缓冲区);if(packetLen==received)//我们有完整的缓冲区{message=PacketHelper.UnpackProtocol(buffer);}}Console.WriteLine(消息);//output:"网络消息1"本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
