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