나는 많은 클라이언트 (텔넷과 함께 훌륭하게 작동 함)를 서비스하기 위해 간단한 TCP 서버를 작성했습니다. 하지만, 소켓과 표준 입력을 멀티플렉싱하는 간단한 TCP 클라이언트를 작성하고 싶었습니다. 평소와 같이 쓴 서버 연결, 연결 코드는 괜찮습니다.클라이언트 C의 표준 입력과 소켓을 멀티플렉싱
멀티플렉싱 소켓 및 표준 입력에 문제가 있습니다.
이void multiplexClient(FILE *fp, int sockfd, char inbuffer[], char outbuffer[])
{
int maxfd;
fd_set rset;
FD_ZERO(&rset);
for(;;)
{
FD_SET(fileno(fp), &rset);
FD_SET(sockfd, &rset);
maxfd = std::max(fileno(fp), sockfd) + 1;
int res = select(maxfd, &rset, NULL, NULL, NULL);
if(res < 0)
{
printf("'select error\n");
}
if(FD_ISSET(sockfd, &rset))
{
if(read(sockfd, inbuffer, sizeof(inbuffer)) == 0)
printf("read error\n");
printf("Received: %s\n", inbuffer);
fflush(stdout);
memset(inbuffer, 0, sizeof(inbuffer));
}
else if(FD_ISSET(fileno(fp), &rset))
{
fprintf(stdout, "\n> ");
if(fgets(outbuffer, sizeof(outbuffer), fp) == NULL)
return;
write(sockfd, outbuffer, strlen(outbuffer));
printf("Send: %s\n", outbuffer);
fflush(stdout);
memset(outbuffer, 0, sizeof(outbuffer));
}
}
}
// int main
// sockfd = socket...
// connect
while(1)
{
multiplexClient(stdin, socket_fd, inbuffer, outbuffer);
}
// ...
return 0;
}
내 첫 번째 클라이언트 :
$ ./client localhost 9034
hello, other client!
> Send: hel
Received: hel
Received: lo! ��~�~���~�
Received: :)
Received: wha
내 두 번째 클라이언트 :
$ ./client localhost 9034
hello! :)
> Send: hel
whats is wrong with this chat?!
> Send: lo!
> Send: :)
> Send:
> Send: wha
어떻게이 문제를 해결하는 가장 큰 문제를 만들어 내 코드?
를 않네 내 편집을 확인하는 데 도움이 didnt는이 :( –