2014-03-31 62 views
1

我有我的服務器程序綁定罰款0.0.0.0(INADDR_ANY)或127.0.0.1(INADDR_LOOPBACK),但是我希望程序監聽我的本地網絡IP(192.168.1.24)和我不斷收到此錯誤:不能TCP套接字綁定到本地IP

錯誤打開監聽端口8888(原TCP輸出):無法分配請求的地址

下面是相關代碼:

#define LOCAL_IP ((unsigned long int) 0x1801A8C8) //192.168.1.24 
#define PORT 8888 

struct sockaddr_in sa; 

sa.sin_family = AF_INET; 
sa.sin_port = htons(PORT); 
sa.sin_addr.s_addr = LOCAL_IP; /* Bind servers to local net*/ 
//sa.sin_addr.s_addr = htonl(INADDR_ANY); 

我也試過htonl( LOCAL_IP)和inet_addr(「192.168.1.24」)沒有運氣。

+0

什麼操作系統?你有防火牆,還是運行類似的安全? –

+2

C8是200,而不是192 – nos

+0

這有什麼錯INADDR_ANY? – EJP

回答

2

您使用的IP是:200.168.1.24

用途:

sa.sin_addr.s_addr = inet_addr("192.168.1.24"); 

代替。
確保端口尚未被使用。 (使用程序netstat)在測試之前,您是否正確關閉了套接字?

+0

s_addr長時間接受網絡。所以後面的十六進制地址是好的,錯誤是C8 = 200,當我應該有C0 = 192。感謝指出! – tozhan

1

你不能將任何字符串或整數到sa.sin_addr.s_addr

所以,你需要將它轉換成合適的格式。 你寫sa.sin_addr.s_addr = LOCAL_IP聲明將被替換爲

sa.sin_addr.s_addr =192.168.1.24 

這是造成問題的原因。

使用inet_addr(LOCAL_IP)相反,它應該工作。