希望你能帮帮我。
我正在尝试通过 TCP/IP 通过网络发送 1000 位的数据包,我希望也能够在 Cygwin 和 Windows 中使用重叠 I/O 技术。
在 Cygwin 中,我尝试使用“readv() 和 writev()”函数调用来发送 1000 位,而在 Windows 中,我尝试使用 winsock2 中的 WSASend() 和 WSARecv() API。 h 头文件。
似乎我只能从 Cygwin(client.cpp) 发送 1000 位到 Windows(server.cpp)。 1000多位,遇到意想不到的结果。这些位似乎被环绕或覆盖了。
我在整个互联网上搜索过,但似乎没有人像我一样尝试过使用这种方法来处理事情,因此我正在寻求您的帮助。
谢谢你和最好的问候, 科尼利厄斯
最佳答案
如果您想在 Windows 上使用重叠 I/O,那么您可能想看看我在代码项目中写的一些文章,这些文章可能会为您提供一个起点。这些使用 IO 完成端口,这是在 Windows 上执行重叠 I/O 的最有效方式,并带有完整的源代码。有文章和最新来源的链接 here .
根据您的简短问题描述,很难准确判断可能出了什么问题。您很可能假设您的读取将读取与您正在写入的相同数量的数据,而 TCP 并非如此; TCP 是一个字节流,您的读取需要考虑到这一点并相应地循环,直到您重新组装一个完整的“消息”。
关于c++ - readv(), writev(), WSARecv(), WSASend(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708990/