我需要在每个与主进程连接的进程环之间使用套接字进行通信。 我已将所有进程与主进程连接,并且每个进程都连接到它的左右邻居和主进程。
当其中一个进程从主进程获得要转发到左邻居或右邻居的进程时,进程可以发送给它的左邻居。但是它的左邻居没有从选择系统调用中解锁以接收消息。 我目前只在同一台机器上使用它们。 请让我知道我做错了什么。 这是该过程的代码。
玩家使用套接字(AF_INET,SOCK_STREAM,0)连接
while(1)
{
FD_ZERO(&read_fd);
FD_SET(s,&read_fd);
FD_SET(right_sock,&read_fd);
FD_SET(left_sock,&read_fd);
int max_sd=s;
if(right_sock > max_sd)
max_sd = right_sock;
if(left_sock > max_sd)
max_sd = left_sock;
int activity = select( max_sd + 1 , &read_fd , NULL , NULL , NULL);
if(FD_ISSET(s, &read_fd))
{
len = recv(s, buf1, 5, 0);
if ( len < 0 )
{
fprintf(stderr,"recvhop\n");
exit(1);
}
srand(10);
ran_no = rand() % 2;
ran_no = 0;
strcpy(hopseries,my_id_char);
if(ran_no == 0)
{
printf("Send to Left\n");
retcode= send(left_sock,&hop_str,strlen(hop_str),0);
if(retcode == -1)
{
fprintf(stderr,"recvhop\n");
exit(1);
}
retcode= send(left_sock,&hopseries,1000,0);
if(retcode == -1)
{
fprintf(stderr,"recvhop\n");
exit(1);
}
}
else if(ran_no == 1)
{
printf("Send to Right\n");
retcode= send(right_sock,&hop_str,strlen(hop_str),0);
printf("retcode->%d\n",retcode);
if(retcode == -1)
{
fprintf(stderr,"recvhop\n");
exit(errno);
}
retcode= send(right_sock,&hopseries,1000,0);
if(retcode == -1)
{
fprintf(stderr,"recvhop\n");
exit(errno);
}
}
}
if(FD_ISSET(left_sock, &read_fd))
{
printf("LEFT\n");
// RECEIVE FROM IT'S LEFT NEIGHBOUR
}
if(FD_ISSET(right_sock, &read_fd))
{
printf("RIGHT\n");
// RECEIVE FROM IT'S RIGHT NEIGHBOUR
}
}
}