1

客户端编码

TcpClient tcpclnt = new TcpClient("192.157.1.1", 8001);
Stream stm = tcpclnt.GetStream();
byte[] bites = new byte[dataLength];
    // assigning values for bites
stm.Write(clientdata, 0, clientdata.Length);

服务器端编码

 TcpListener listener = new TcpListener(IPAddress.Any, 8001);
 listener.Start(10);
 Socket soc = listener.AcceptSocket();
 byte[] bites = new byte[1000];
 int avail = soc.Available;
 int receivedBytesLen = soc.Receive(bites);

在将客户端数据写入流之后,服务器端的 soc.Available 也为零。所以服务器无法读取数据。问题是什么?

4

3 回答 3

2

根据 msdn,NetworkStream.Flush() 实际上尚未在 .net 4.0 中实现:

从流中刷新数据。此方法保留供将来使用。

你的问题很可能是nagle 算法引起的,防止发送少量数据以减少拥塞。您可以尝试通过在 tcpClient 对象上设置以下属性来禁用它:

tcpClient.NoDelay = true;
tcpClient.Client.NoDelay = true;

如果您一直遇到问题,还可以查看networkComms.net,这是一个随时可用的解决方案。

于 2011-12-18T20:52:30.733 回答
2

数据被缓冲。客户必须写更多。或者关闭流。

于 2011-02-01T09:44:24.017 回答
-2

stm.Write(...)添加调用后stm.Flush(),数据将被刷新到网络。

于 2011-02-01T09:43:21.570 回答