我在同一台机器上运行的VB和VC ++程序之间实现了TCP / IP通信。在VC ++方面,我产生了一个侦听连接的线程。在VB方面,我使用Winsock API连接到C ++服务器。一切似乎都运行良好,特别是当我手动调试并逐步完成通信时。该协议是基于文本的,命令终止于'\ n',可能有也可能没有答案。
这就是问题所在。我正在尝试实现发送到服务器的命令,这需要一些处理,服务器将它们发送回客户端。在简单的条件下,这可以正常工作,但在重负载或不同的机器配置下,有时通信会中断。
客户端可能正在发送命令,但服务器可能正在发送先前命令的答案。 VB客户端以某种方式得到一个支离破碎的答案(比如,而不是“收到数据”它得到“EIVED”),这打破了我实现的跟踪连接的状态机。
所以是的,客户端和服务器正在同时通话,这就产生了问题。如何序列化或排队此通信?我知道这与以太网上的网络数据包冲突问题类似。
答案 0 :(得分:5)
而不是数据包冲突,我的猜测是你读取的内容比你预期的更多。可能是你最后一次从套接字读取看起来像
OTHER STUFF\nDATA REC
在下一次阅读中你得到“EIVED”?