나는 select를 실험하고 있으며 사용자가 명령 줄에 입력 한 내용을 서버에 쓰는 간단한 응용 프로그램을 가지고 있습니다. 그런 다음 서버가이를 다시 에코합니다. select 함수를 사용하여 연결된 소켓과 stdin을 수신 대기합니다.소켓 및 표준에서 선택
클라이언트 코드 : 이제
const int BUFFER_SIZE = 1024;
char *readArr = new char[BUFFER_SIZE];
fd_set rset;
ssize_t n;
string input;
FD_ZERO(&rset);
while(true){
FD_SET(socketFD[0], &rset);
FD_SET(0, &rset);
maxfpd1 = max(socketFD[0], 0) + 1;
select(maxfpd1, &rset, NULL, NULL, NULL);
if(FD_ISSET(0, &rset)){
cin>>input;
write(socketFD[0], input.c_str(), input.size());
cout<<"\nSocket write!\n";
}
if(FD_ISSET(socketFD[0], &rset)){
n = read(socketFD[0], readArr, BUFFER_SIZE-1);
readArr[n] = '\0';
cout<<"\nSocket read!\n";
cout<<readArr;
}
}
, 내가 입력하면 "안녕하세요!" 명령 줄에서 Enter 키를 누르면 다음 출력이 표시됩니다.
Hello! //User input
Socket write!//Client output
Socket read!//Client output
다시 입력 할 경우 "Hello!" 인쇄됩니다. 왜 내가 두 번이나 타격을해야합니까?
서버 출력에서 첫 번째 메시지를 입력 한 후 서버로 메시지가 올바르게 전송 된 것을 볼 수 있습니다.