0

私は、クライアント側で実行されている 2 つのスレッド (バルクとリテール) があり、データを受信するためにサーバーに 2 つのポートがあるクライアント サーバー コードに取り組んでいます。サーバー側でselect()を使用したいのですが、「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;
 }
4

1 に答える 1

0

変化する

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){
      ...
   }
}

あなたのコードでは、2 番目の外側の if には決して到達しません。if (x) then y; else if (x) then z;明らかに、2 番目の if に到達することはありません。

于 2013-03-23T19:16:59.690 に答える