2014-03-31 63 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)相反,它应该工作。