c++ - readv(), writev(), WSARecv(), WSASend()

标签 c++ c windows sockets network-programming

希望你能帮帮我。

我正在尝试通过 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/

相关文章:

c++ - 访问结构的 union 成员的优雅方式

c++ - CUDA 使用 CMake 在 x86 中卡住构建

c - 是否有用于在 Apache C 模块上运行单元测试的框架?

c - 使用列表内存 - 家庭作业

c - 无法在 C 函数中将常量字符串作为参数传递

windows - 稍后在脚本中使用 BAT 输入

c++ - 根据循环内的两个不同条件更新计数器

c++ - C++ 中的 101 Qt 样式表边距填充 hack 指南。设置填充不起作用

python - 如何让 Spyder 直接从 Windows 资源管理器打开 python 脚本(.py 文件)

windows - 为什么 Windows 中的换行符是 2 个字节?