gpt4 book ai didi

C编程如何更改套接字连接到的端口

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:37 25 4
gpt4 key购买 nike

所以这是一个扩展 LinuxHowTo page 的家庭作业.我的任务是创建客户端和服务器。服务器最多可以有 5 个与客户端的连接,并且在未满时必须保持打开状态以便与客户端建立新连接。一旦客户端连接并且服务器接受。我在服务器中运行一个 fork(),然后我从 child 在服务器和客户端之间来回发送数据。

    //accept function will take next connection from listen queue for processing
//or it will block the process until a connection request arrives
//third parameter identifies client can be null to accept any request from any machine
newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);

问题是 child 使用与父相同的端口,所以我无法再与父建立连接。
这是我尝试更改客户端和服务器正在通信的端口的方法。

  • fork 之后,在子进程中

  • 生成一个>60000的随机数作为新的端口号。

  • 将新的端口号发送给客户端

  • 关闭旧套接字

  • 完成重新连接服务器和子进程中的套接字的过程。

但是,当尝试从客户端连接时,我一直收到连接错误。

//call connect return 0 for success and -1 for error
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){
fprintf(stderr,"ERROR connecting to server\n");
//remove the new file
remove(newFileName);
exit(1);
}

最佳答案

只是不要在客户端调用bind。当您在客户端调用 connect 时,指定服务器正在监听的 IP 和端口。这将导致实现为每个客户端分配一个唯一的源端口以供使用。

The problem is that the child uses the same port as the parent, and so I can't make anymore connections to the parent.

您可以使用同一目标端口建立多个出站连接,因为它们会有不同的源端口。而且,当然,服务器可以接受许多具有相同目标端口的连接。

关于C编程如何更改套接字连接到的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35821960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com