c - sockaddr.sin_port = 1337 与 "real"打开的端口不匹配

标签 c linux sockets port sockaddr-in

我正在尝试制作一个接受连接的非常简单的服务器。

int sock, serv;
struct sockaddr_in in_sock;
serv = socket(AF_INET, SOCK_STREAM, 0);
in_sock.sin_addr.s_addr = 0;
in_sock.sin_port = 1337;
in_sock.sin_family = AF_INET;
bind(serv, (struct sockaddr *)&in_sock, sizeof(in_sock)); 
listen(serv, 0);
client = accept(serv, 0, 0);

但是,当尝试连接到 127.0.0.1:1337 时,我收到一条连接被拒绝的消息:

(UNKNOWN) [127.0.0.1] 1337 (?) : Connection refused

然而,一个简单的 netstat -tcpan 告诉我确实打开了一个端口:

tcp 0 0 0.0.0.0:14597 0.0.0.0:* LISTEN

如果我将 sin_port 设置为更高的端口,它似乎可以正常工作。

我在这里错过了什么?为什么1337端口没有打开?好像也是免费的。

最佳答案

struct sockaddr_in 中的端口号字段以网络字节顺序存储。这意味着在向它存储值时必须使用 htons():

in_sock.sin_port = htons(1337);

否则,端口号将保持字节交换状态。这正是这里发生的事情:

 1337 = 0x0539
14597 = 0x3905

关于c - sockaddr.sin_port = 1337 与 "real"打开的端口不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014762/

相关文章:

c - 当格式字符串以换行符结尾时,scanf 的行为是什么?

c - 在 C 中传递数组中的值而不返回

c - 无法适应数据内存段的段错误?

linux - 尝试在 shell CLI 中将 .JPEG 重命名为 .jpg

java - 如何在Linux中安装Hammurapi来查看Java源代码

c - 检索存储为字符串的地址

linux - Perl(或其他东西)- ^M 问题

python - 我创建套接字时未定义套接字

python - 无法关闭Python应用程序

java - 错误: constructor Thread in class Thread cannot be applied to given types;