在Socket关闭之前,C#不会发送套接字数据

时间:2013-03-14 02:50:17

标签: c# sockets

我正在编写一个C#应用程序,通过一组4-10字节的数据包与服务器通信。服务器是用Java编写的,我可以把数据放到它上面,然而,实际将数据包推送到服务器的唯一方法是调用ServerStream上的Close()方法,这对我来说是不可能的,因为服务器将数据包发送回发件人。我已经尝试过设置

socket.NoDelay = true;
socket.Client.NoDelay = true;

哪个不起作用。 Flush()方法也没有,因为它还没有实现。有趣的是,当我必须强行关闭应用程序时,服务器会抱怨连接已重置。

代码如下

socket.NoDelay = true;
socket.Client.NoDelay = true;
socket.Connect("127.0.0.1", 6789);
serverStream = socket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes("ping");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)socket.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
Console.WriteLine(returndata);

如果我要在Flush()方法之后添加行serverStream.Close();,服务器就会收到正确的数据包。

我的通讯层出了什么问题?我只需要使用更大的数据包,还是Nagle算法仍然有效?

0 个答案:

没有答案