我在localhost的端口1234创建一个服务器 . 在客户端代码中,我发起了一个 struct sockaddr_in server_addr
并用服务器的IP地址和端口号填充它 . 当我尝试将客户端连接到服务器时,我得到"Address already in use":
bind(client_sockfd,server_addr,sizeof server_addr)
因此操作系统认为我正在尝试使用相同的地址和端口号创建另一个服务器套接字 . 在这种情况下,如何告诉操作系统server_addr是我要连接的另一个 endpoints ,并且它找到了客户端套接字的另一个端口号?
2 回答
您只需将
bind()
用于服务器和客户端使用int connect(int socket, const struct sockaddr *address, socklen_t address_len);
.有关Linux中套接字的信息,请参阅本教程:
http://www.linuxhowtos.org/C_C++/socket.htm
你使用connect(client_sockfd,server_addr,sizeof(..))来告诉操作系统我的客户端套接字应该连接到这个服务器地址 .
如果是UDP套接字,您还可以使用sendto(client_sockfd,... server_addr)调用来指定数据包应该转到此服务器地址 .