2012-07-27 48 views
0

我已经设置了TCP/IP客户端/服务器连接,每次请求被交换时都会打开和关闭连接。它完美的工作;客户端应用程序打开连接,发送请求并等待。服务器应用程序收到请求后会生成一个响应并将其发回并关闭连接。 Cient和服务器应用程序可以完成数百次。在TCP/IP连接上设置源端口/ IP

现在我试图进入下一步:设置源IP地址和端口。

该代码应该可以在Linux和Windows上运行,所以SO_BINDTODEVICE不存在问题,因为它仅在Linux/Unix上受支持。

我试图绑定客户端套接字上的源端口和ANYADRR。它有效......一段时间。最终它宣布错误10038.我通过互联网阅读了几篇文章,但没有明确的答案......源IP的选择仍不清楚。

请注意,我也在同一个库(无连接UDP通信模式)上有一个UNICAST和MULTICAST模式,一个发送者和接收者,并且我能够在多播模式UNICAST I上设置源端口/ IP还没有尝试。

无论如何,任何人都知道任何可能的帮助?我正在使用WinSock 2.2并试图尽可能多的平台indemendent。

+0

为什么你需要控制源端口?这通常是一个非常糟糕的主意。 – EJP 2012-07-28 03:06:40

回答

0

Winsock错误10038WSAENOTSOCK,这意味着你的代码在某处存在一个错误。您正在尝试使用SOCKET句柄进行操作,该句柄未指向有效的套接字对象。这与bind()函数本身无关。要么您打电话给socket(),而是检查其结果是否有错误,或者您正在尝试使用已被您的应用程序关闭的SOCKET句柄,或者您的内存溢出导致SOCKET句柄损坏。