socket 循环发送数据 C#问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 18:57:10
为什么我用socket循环发送怎么不行?一次全部发送又行?哪位高手帮下?
发送端:
if (T == 2)
{
Byte[] sendbyte = new Byte[500];
int i;
for (i = 0; i < 100; i++)
{
string send = 0 + "|"+a.ToString()+"|";

// Byte[] sendbyte = new Byte[500];

sendbyte = System.Text.Encoding.BigEndianUnicode.GetBytes(send.ToCharArray());

netstream.Write(sendbyte, 0, sendbyte.Length);//向客户发送信息。

}
接收端: while (true)
{
double a, b;
Byte[] Rec = new byte[64];
NetworkStream netstream = new NetworkStream(sock);
netstream.Read(Rec, 0, Rec.Length);//读取客户发送来的信息。

string RecMessage = System.Text.Encoding.BigEndianUnico

TCP socket是没有数据边界的,也就是说通常下分段发送和一次性发送效果是一样的,所发送的数据都会缓存在系统TCP buffer中,buffer满了才会真正发送。也就是说服务器发送一堆数据包,客户端有可能只收到一个数据包就可以了,或者服务器发送一个数据包,而客户端却受到很多数据包(由于发送的数据包太大)。UDP才会保留数据边界。

试试在NetworkStream后加Flush(),直接发送。
netstream.Write(sendbyte, 0, sendbyte.Length);//向客户发送信息。
netstream.Flush();

或者手动将IP包中的TCP Segment加入PSH选项。

或者客户端直接处理一个byte[]。

没做过类似的例子`! 很想学习下
希望楼下的有人实现