我正在编写一个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算法仍然有效?