2012-11-09 67 views
0

我做了一個使用udp發送消息的程序。該程序最初將初始化具有默認IP地址和端口的udp套接字。但是,它也應該允許用戶在運行時更改目標IP地址和端口。重新綁定UDP套接字

目前,我關閉當前套接字,如果用戶更改IP地址/端口,並重新初始化/綁定與新的IP地址/端口套接字。

該程序能夠使用初始套接字成功發送消息。但是當我重新綁定IP地址/端口時,綁定有時會失敗。 Bind()返回值-1。我在網上做了一些搜索,並且讀到一個套接字關閉時,TCP協議有2msl超時。這是否適用於UDP?

此外,有沒有更好的方法來允許用戶更改目標IP /端口。我在visual studio btw上使用C++。

謝謝。

+0

當'bind()'失敗時,'WSAGetLastError()'的返回值是什麼? –

回答

0

2MSI超時不適用於UDP。但是,另一個應用程序可能正在使用您嘗試綁定的ip/port。如果您知道IP /端口可以安全使用,則在致電bind()之前,可以使用setsockopt()啓用套接字的SO_REUSEADDR選項。

+0

對不起,我無法真正複製和粘貼我的代碼,因爲我正在處理一個保密項目。項目是在沒有互聯網訪問的com上完成的,PC之間的數據傳輸是不允許的。 – user1594158

+0

當調用Bind()時,WSAGetLastError返回值10022。嘗試使用SO_REUSEADDR。問題依然存在。 – user1594158

+0

10022是'WSAEINVAL',如果套接字已經綁定到一個地址,'bind()'返回。套接字只能綁定一次。 –