2013-03-23 5 views
0

클라이언트 측 (대량 및 소매)에서 실행중인 두 개의 스레드가있는 클라이언트 서버 코드에서 작업하고 있으며 데이터를 수신 할 서버에 두 개의 포트가 있습니다. 서버 쪽에서 select()를 사용하고 싶지만 "sd1 - 벌크 포트"에서 데이터가 수신되지 않는 실수를 저지르기를 원합니다. 누군가가 현재 코드를 수행하는 방법으로 나를 도울 수 있다면 정말로 감사 할 것입니다. 감사!!여러 클라이언트가있는 서버 측에서 select()

if(FD_ISSET(i, &readfds)){ 
    if(i == sd){ 
     ... 
    } 
else if(FD_ISSET(i, &readfds)){ 
    if(i == sd1){ 
     ... 
    } 
} 

if(FD_ISSET(i, &readfds)){ 
    if(i == sd){ 
     ... 
    } 
    else if(i == sd1){ 
     ... 
    } 
} 

에 도달하지 않을 경우

int main(int argc, char *argv[]) { 

fd_set readfds, activefds; 

// SOCKET CREATION RETAIL 
sd=socket(AF_INET, SOCK_DGRAM, 0); 
if(sd<0) { 
printf("error creating retail socket \n"); 
return -1; 
} 

// SOCKET CREATION BULK 
sd1=socket(AF_INET, SOCK_DGRAM, 0); 
if(sd1<0) { 
printf("error creating retail socket \n"); 
return -1; 
} 

// BIND RETAIL PORT 
servAddr.sin_family = AF_INET; 
servAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
servAddr.sin_port = htons(RETAIL_PORT); 
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr)); 
if(rc<0) { 
printf("error binding retail port number %d \n",RETAIL_PORT); 
return -1; 
} 

// BIND BULK PORT 
servAddr.sin_family = AF_INET; 
servAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
servAddr.sin_port = htons(BULK_PORT); 
rc1 = bind (sd1, (struct sockaddr *) &servAddr,sizeof(servAddr)); 
if(rc1<0) { 
printf("error binding bulk port number %d \n",BULK_PORT); 
return -1; 
} 

int nfds; 
if(sd>sd1){ 
nfds = sd;} 
else{ 
nfds = sd1;} 

FD_ZERO(&activefds); 
FD_SET(sd, &activefds); 
FD_SET(sd1, &activefds);  

    while(1){ 

    readfds = activefds; 

    if (select(nfds+1, &readfds, NULL, NULL, NULL) < 0){ 
    perror("select"); 
    break; 
    } 

     for(i=0;i<nfds;i++){ 

    if(FD_ISSET(i, &readfds)){ 
    printf("sd = %d\n\n\n",sd); // sd = 3 getting printed here 
    if(i == sd){ 
     n = recvfrom(sd, &requested_retail_cases, 4, 0, (struct sockaddr *) &cliAddr, &cliLen); 
      printf("in retail\n"); 
      } 

    else if(FD_ISSET(i, &readfds)){ 

    if(i == sd1){ 

    n1 = recvfrom(sd1, &requested_bulk_cases, 4, 0, (struct sockaddr *) &cliAddr, &cliLen); 
    } 

    } 
} 
} 
return 1; 
} 
+0

코드 서식을 향상시키고 도움이 필요하면 문제의 원인이되는 시나리오를보다 자세하게 분석해야합니다. –

답변

0

변경은 두 번째 외부 코드에서 의미한다. 분명히 if (x) then y; else if (x) then z;을 가지고 있습니다. 두 번째 if는 절대로 도달하지 않습니다.

관련 문제