c - 为什么我可以绑定(bind)到 C 中的(看似)无效端口?

标签 c sockets

我用 C 使用 BSD 套接字制作了一个基本的客户端和服务器。我能够绑定(bind)到 65535 以上的端口号,并且客户端可以连接到它。我在这里做错了什么?

代码:

int port = 999999;
...
serverAddr.sin_port = htons(port);

最佳答案

因为 htons 接受一个 16 位参数,它的输入将被截断。

试试看你会得到什么:

#include <stdio.h>
#include <arpa/inet.h>

int
main(int argc, char **argv)
{
        int foo = 999999;
        int bar = ntohs(htons(foo));

        printf("%d\n", bar);

        return 0;
}

关于c - 为什么我可以绑定(bind)到 C 中的(看似)无效端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025397/

相关文章:

c - ipcs -s 不显示命名信号量

c - 在已编译的应用程序中隐藏密码/ key

C语言isMagicsquare函数: What logic error is in my function code?

c - 如何检查字符串是否为数字?

C++多UDP socket数据处理

java - 尝试发送到 SSLServerSocket 时出现 SSLSocket 异常握手错误

sockets - 是否存在网络端口数量不够的应用?

c - 从堆栈递归构建二叉表达式树背后的逻辑

sockets - 欢迎端口和监听端口一样吗?

linux - 除了缓冲区已满之外,EAGAIN 会在发送时返回其他情况吗?