我正在编写一个2D多人游戏,包括两个应用程序,一个控制台服务器和一个窗口客户端。到目前为止,客户端有一个FD_SET,它充满了连接的客户端,我的游戏对象指针列表和其他一些东西。在main()中,我初始化侦听套接字并创建三个线程,一个用于接受传入连接并将它们放在FD_SET中,另一个用于处理对象的位置,速度和加速度并将它们标记(如果需要)作为必须在客户端上更新。第三个线程使用send()函数发送每个对象的更新信息(迭代对象指针列表)。这样的分组包括操作码,分组大小和分组。实际数据。在客户端我解析它,通过读取正确接收的前5个字节(操作码和数据包大小),但当我想读取数据包的剩余部分(因为我现在知道它的大小),我得到一个WSAECONNABORTED(错误代码10053)。我已经读过这个错误,但是看不出它在我的应用程序中出现的原因。任何帮助将不胜感激。
答案 0 :(得分:0)
错误表示系统关闭了套接字。这可能是因为它检测到客户端已断开连接,或者因为它发送的数据超出了您的读取次数。
网络协议的解析器通常需要大量工作才能使其健壮,并且您无法分辨单个read()中将获得多少数据,例如:在您阅读的第一个块中,您可能获得的操作代码和数据包大小可能会更多,甚至可能会减少(例如只有操作代码)。仔细检查这种情况不会发生在您的失败案例中。