readv(),writev(),WSARecv(),WSASend()

时间:2009-04-02 09:31:52

标签: c++ c windows sockets network-programming

我希望你能帮助我。

我正在尝试通过TCP / IP在网络上发送1000位数据包,我希望能够在Cygwin和Windows中使用重叠I / O技术。

在Cygwin中,我试图使用“readv()和writev()”函数调用在Windows中发送1000位,我试图在winsock2中使用WSASend()和WSARecv()API。 h头文件。

似乎我只能从Cygwin(client.cpp)向Windows(server.cpp)发送1000位。超过1000位,我遇到意想不到的结果。似乎这些比特被包裹或覆盖。

我在互联网上搜索,但似乎没有人像我一样尝试使用这种方法,因此我正在寻求你的帮助。

谢谢你,最诚挚的问候, 科尼利厄斯

2 个答案:

答案 0 :(得分:1)

如果你想在Windows上使用重叠的I / O,那么你可能想看看我在The Code Project中写的一些文章,这些文章可能会为你提供一个起点。它们使用IO完成端口,这是在Windows上进行重叠I / O的最有效方式,并提供完整的源代码。这些文章和最新来源here都有链接。

从您的简短问题描述中,很难确切地说出可能出现的问题。您最有可能假设您的读取将读取您正在编写的相同数量的数据,而这与TCP的情况不同; TCP是一个字节流,您的读取需要考虑到这一点并相应地循环,直到您重新组装完整的“消息”。

答案 1 :(得分:0)

你的问题很不清楚,你需要澄清一下。以下是一些想法,仍然是:

  • 使用TCP发送“数据包”不是一个好主意。 TCP的数据模型是一个字节流。
  • 你确定你的意思是1000位,而不是1000字节?
  • 您需要澄清“意外结果”的含义,这是非常模糊的。
  • Overlapped I/O似乎是针对异步I / O的Windows特定技术,我不希望它在Cygwin中工作。