Sockets 检查特定客户端(具有ip1,端口1)是否连接到套接字?
这是一个基于UDP的基本客户机-服务器程序。如果客户端1发送数据,客户端2将接收数据,反之亦然Sockets 检查特定客户端(具有ip1,端口1)是否连接到套接字?,sockets,udp,ip,Sockets,Udp,Ip,这是一个基于UDP的基本客户机-服务器程序。如果客户端1发送数据,客户端2将接收数据,反之亦然 address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT ); //bind the socket to localhost port 1902 if (bind(master_socket, (struct sockaddr *)&address, s
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
//bind the socket to localhost port 1902
if (bind(master_socket, (struct sockaddr *)&address, sizeof(address))<0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
printf("Listener on port %d \n", PORT);
if (listen(master_socket, 3) < 0)
{
perror("listen");
exit(EXIT_FAILURE);
}
//accept the incoming connection
addrlen = sizeof(address);
puts("Waiting for connections ...");
while(TRUE)
{
//clear the socket set
FD_ZERO(&readfds);
//add master socket to set
FD_SET(master_socket, &readfds);
max_sd = master_socket;
//add child sockets to set
for ( i = 0 ; i < max_clients ; i++)
{
//socket descriptor
sd = client_socket[i];
//if valid socket descriptor then add to read list
if(sd > 0)
FD_SET( sd , &readfds);
//highest file descriptor number, need it for the select function
if(sd > max_sd)
max_sd = sd;
}
//wait for an activity on one of the sockets , timeout is NULL , so wait indefinitely
activity = select( max_sd + 1 , &readfds , NULL , NULL , NULL);
if ((activity < 0) && (errno!=EINTR))
{
printf("select error");
}
//If something happened on the master socket , then its an incoming connection
if (FD_ISSET(master_socket, &readfds))
{
if ((new_socket = accept(master_socket, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0)
{
perror("accept");
exit(EXIT_FAILURE);
}
//inform user of socket number - used in send and receive commands
printf("New connection , socket fd is %d , ip is : %s , port : %d \n" , new_socket , inet_ntoa(address.sin_addr) , ntohs(address.sin_port));
....
....
//what has to be done here to check a client with IP1, Port 1 is already connected? //
....
....
}
}
在这条消息之后,我想检查是否连接了具有IP1端口1的特定客户端?例如,检查ip 127.0.0.1和端口44852的客户端是否已连接?如果已连接打印,则所需的客户端已可用。有人能给我建议一个方法吗?应该很清楚怎么做。您正在列表中存储客户端信息。因此,只需在列表中循环检查accept报告的ip/端口是否已经在列表中,如果没有,则添加它。只要确保每当客户端断开连接时,列表都是最新的。您说过您使用的是UDP,但此代码是针对TCP的。不能将侦听和接受与UDP一起使用。
New connection , socket fd is 4 , ip is : 127.0.0.1 , port : 44851
Welcome message sent successfully
Adding to list of sockets as 0
New connection , socket fd is 5 , ip is : 127.0.0.1 , port : 44852
Welcome message sent successfully
Adding to list of sockets as 1