Tcp数据正在相互连接

Tcp数据正在相互连接,tcp,stream,server,client,Tcp,Stream,Server,Client,我在使用tcp时遇到问题。 当我在客户机或服务器上读写数据时,他应该每次读一个数据包 但有时当我非常快地写入数据时(例如在循环中),客户机将其作为一个数据接收,而不是作为三个不同的数据包处理 发送数据: messageToSend = Encoding.ASCII.GetBytes(data); c.GetStream().Write(messageToSend, 0, messageToSend.Length); 在客户机中接收: byte[] message = new b

我在使用tcp时遇到问题。 当我在客户机或服务器上读写数据时,他应该每次读一个数据包

但有时当我非常快地写入数据时(例如在循环中),客户机将其作为一个数据接收,而不是作为三个不同的数据包处理

发送数据:

messageToSend = Encoding.ASCII.GetBytes(data);        
c.GetStream().Write(messageToSend, 0, messageToSend.Length);
在客户机中接收:

byte[] message = new byte[1024];
int i = 0;
i = c.GetStream().Read(message, 0, message.Length);
Encoding.ASCII.GetString(message, 0, i);
//Handle the new data....

希望它足够清楚,并提前感谢

TCP从设计上讲是流协议,如果你读不出来,它就会堆积在缓冲区中。例如,UDP是dgram协议,它有固定的数据包,可以单独读取。

显示如何将数据写入客户端。类似于:
messageToSend=Encoding.ASCII.GetBytes(数据);                                                                             c、 GetStream().Write(messageToSend,0,messageToSend.Length)是的,在这之前我确实使用了UDP,但我想试试TCP。有什么标志或东西可以帮助我吗?@cnc没有。TCP没有为您提供数据包/帧API。您需要自己在TCP上发送/接收的数据中以某种方式处理这些数据,这样您就可以将对应用程序有意义的数据包彼此分离,这样您就可以知道什么时候有完整的数据包,等等。@否,那么您是说我需要添加到字符串开始和结束并拆分它?@cnc是的,这是一种方式,请注意,您可能无法通过一个.Read()调用获得这些“开始”和“结束”之间的所有内容,或者可能会得到几个。或者两者之间的任何事情,所以你也需要处理。或者,您可以在要发送的每个数据包前面加上数据包的长度,然后首先读取该长度,以了解需要读取的数据量。@对于UDP,这甚至不是真的。单个UDP数据报可以拆分为多个数据包。