对于tcp / ip应用程序,我是初学者。我编写了一个游戏,最近我添加了网络多人游戏。我使用System.Net.Sockets中的TcpListener和TcpClient对象来实现网络。当我在localhost或LAN上测试时,游戏效果很好。后来,我在更远的距离上测试了它:在我的电脑和我的天蓝色虚拟机之间。结果令人震惊。客户端仅收到服务器发送的大约7%的消息。服务器收到了84%的邮件。我知道TCP / IP并不了解消息是什么,因为它以数据流的形式发送数据。这就是我认为的一个信息:
NetworkStream networkStream = ClientSocket.GetStream();
networkStream.Write(_bytes, 0, _bytes.Length); //_bytes is array of bytes
networkStream.Flush();
我的服务器每秒发送大约20-40条消息,但99%的消息长度为10-15字节。客户端每秒发送约4条消息。我的机器可以访问快速可靠的互联网连接。我想windows azure数据中心也应该有良好的连接。如何提高应用程序的网络性能?
编辑:客户端如何接收消息:
NetworkStream serverStream = ClientSocket.GetStream();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, inStream.Length);
我刚刚意识到它可能是解释错误,意味着收到了数据,但它有点被误解。对于instace,我还在内部发送一个消息号,表示已发送消息的总数。这个数字被cleint收到的这7%的消息解释得很好。但是,服务器收到的消息中有一些奇怪的数字。例如,我收到消息31,32,33然后570425344然后是35然后是0.所以我猜字节可能会被抵消。我不知道如何以及为什么会发生这种情况。
答案 0 :(得分:0)
您可能无法在一个块中获取所有数据。 使用代码
var actualReceivedLength = serverStream.Read(inStream, 0, inStream.Length);
并阅读actualReceivedLength
以了解您收到的费用,再次致电Read
,直到您阅读的次数达到预期为止。