无法将TCP套接字绑定到本地IP

时间:2014-03-31 12:21:14

标签: c sockets bind listen

我的服务器程序绑定精确到0.0.0.0(INADDR_ANY)或127.0.0.1(INADDR_LOOPBACK),但我希望程序在本地网络IP(192.168.1.24)上侦听并且我一直收到此错误:< / p>

打开侦听端口时出错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”)而没有运气。

2 个答案:

答案 0 :(得分:2)

您使用的IP是:200.168.1.24

使用:

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

代替。
确保端口尚未使用。 (使用程序netstat)您是否在之前的测试中正确关闭了套接字?

答案 1 :(得分: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)代替,它应该有用。