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

时间:2016-03-06 01:19:18

标签: c sockets

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

    //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);

问题是孩子使用与父母相同的端口,因此我无法再与父母建立联系。
以下是我尝试更改客户端和服务器正在进行通信的端口。

  • 分叉后和子进程中

  • 生成随机数> 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);
}

1 个答案:

答案 0 :(得分:4)

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

  

问题是孩子使用与父母相同的端口,因此我不能再与父母建立联系。

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