關於socket通信bind()返回值錯誤:10049


這個問題,我差點和客戶吵起來了。我的電腦確實沒有問題,客戶電腦卻會經常出現,。今天查了下,居然是這種問題,大意了,在這里記錄下。

服務器端程序開啟的時候總是提示:bind錯誤,用WSAGetLastError()獲取錯誤類型為10049。

 memset(&server_addr,0,sizeof(server_addr));
 server_addr.sin_family = AF_INET;
 server_addr.sin_port =htons(7000);
 server_addr.sin_addr.s_addr=inet_addr(INADDR_ANY);

10049 的意思是這樣的。

1 0 0 4 9 —W S A E A D D R N O TAVA I L
不能分配請求的地址。A P I 調用中指定的地址對那個函數來說無效時,就會產生這樣的錯誤。例如,若在b i n d 調用中指定一個I P 地址,但卻沒有對應的本地I P 接口,便會產生這樣的錯誤。另外,通過c o n n e c t 、W S A C o n n e c t 、s e n d t o 、W S A S e n d To 和W S A J o i n L e a f 這四個函數為 准備連接的遠程計算機指定端口0 時,也會產生這樣的錯誤

最后經過一個網友的指點,

服務端是不能夠用INADDR_ANY的  因為這個表示是主機上任意的地址,但是你還不知道服務器端的IP地址,你怎么找到服務器? 所以這里應該把INADDR_ANY設置為一個真正的IP地址,   INADDR_ANY只能用於發送端(就是說,我要發送某個東西,可以采用我的任意的IP,而接受的IP必須是一個我們能找到它的位置的IP)

完美解決,大喜。

 

2017/8/18 我現在覺得出現這個問題的原因會不會是上網卡的原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM