2012-07-27 45 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句柄損壞。