最近在學linux socket通訊,寫下一些我犯過的錯,做備忘。主機是winxp(用cygwin),從機是virtual box的虛擬機ubuntu.
1.getaddrinfo、gethostbyname、gethostbyaddr出錯。
首先檢查網絡,發現主機和ubuntu能通過ip相互ping通,所以網絡應該沒問題。
出錯的原因在於根據ip獲取不到主機名,或根據主機名獲取不到有效的ip.所以要編輯主從機對於的host表。
winxp文件爲 C:\\WINDOWS\\system32\\drivers\\etc\\hosts
linux文件爲 /etc/hosts
在裏面加上本機ip和對應的名稱、想與之通訊的從機ip和名稱,上面的函數就能正確執行。
2.主機client連接linux,connect報錯:connection refused
首先用netstat檢查下端口是否打開,沒打開請檢查程序。
因爲linux一張網卡可以有多個ip,所有檢查server實際綁定bind的ip是否client發起socket連接的ip.這個可以在server裏面添加log查看。