4

我用 C 创建了一个 Linux 网络应用程序,它有点工作

除了每次我运行它时,它都会绑定到一个新的随机端口

//Create Socket
int socket_desc;
socket_desc=socket(AF_INET,SOCK_STREAM,0);
if (socket_desc==-1)
  perror("Create socket");
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
//Port defined Here:
address.sin_port=htons(81);
//Bind
bind(socket_desc,(struct sockaddr *)&address,sizeof(address));
listen(socket_desc,32);
//Do other stuff (includes accepting connections)

如您所见,我已经指定了端口,但它仍然选择了一个免费的随机端口

任何帮助或链接到一个很好的教程表示赞赏

4

2 回答 2

2

您需要使用大于 1024 的端口号。小于 1024 的端口号是保留端口,供标准服务使用。

于 2013-05-23T16:52:09.363 回答
0

这种行为有两个原因(当您指定端口,但系统将套接字绑定到随机端口时):

  1. 如果您要求低于 1024 的端口。这当然是您的情况
  2. 如果您忘记使用htons()功能。在这种情况下,端口号字节的使用顺序错误,导致#1。
于 2014-10-07T15:25:54.810 回答