프로그램은 서버에 클라이언트가 접속을 해서 서버와 클라가 번갈아가면서 메세지를 보내는 프로그램인데요
문제점이 만약 클라가 메세지를 쓰고 있다가 서버가 메세지를 보내버리면 클라가 쓰고 있던 메세지는 무시가 되고 서버가 보낸 메세지가 출력이 됩니다
이건 문제가 아닌데 그러고서 클라가 메세지를 보낼 때 전에 쓰던 메세지도 같이 덧붙여져서 보내집니다
예를 들어서 클라가 123쓰다가 서버가 aaa라고 왔으면
123From server : aaa 이렇게 되는데요
문제가 클라가 다시 456 써서 서버에 보내면 서버쪽에 123456을 수신하게 됩니다
주고 받는 부분 코드만 올리겠습니다 복붙이 안돼서 ㅎ
클라
for(;;) {
printf("\nsendmessage \t=> ");
fflush(stdin);
fgets(buf, MAXLINE, stdin); //buf가 보낼 메세지를 담을 변수입니다 MAXLINE은 4096입니다
if( write(sockfd, buf, strlen(buf)) <0) //buf를 보냅니다
err_sys("write error");
if(!strncmp(buf, "quit", 4)) //quit를 입력했으면 빠져나갑니다
break;
if( (n=read(sockfd, recvline, MAXLINE)) <0) //서버에서 온 메세지를 recvline에 담습니다
err_sys("read error");
else if(n==0)
fputs("connection closed", stdout);
recvline[n]=0;
printf("\nFrom %s \t=> ", argv[1]); // argv[1]은 서버 아이피입니다
fputs(recvline, stdout); //recvline을 출력합니다
}
서버
for(;;) {
if( (n=read(connfd, buf, MAXLINE))<0 ) // 클라로부터 메세지를 받아 buf에 저장합니다
err_sys("read error");
else if(n==0)
break;
buf[n]=0;
if( !strncmp(buf, "quit", 4)) //buf가 quit면 종료시킵니다
exit(0);
printf("\nFrom %s \t=> ", clntname); //clntname은 클라 아이피입니다
fputs(buf, stdout);
printf("\nsendmessage \t=> ");
fflush(stdin);
fgets(sendm, MAXLINE, stdin); // sendm은 보낼 메세지를 담을 변수입니다
if(write(connfd, sendm, strlen(sendm)) <0) //보냅니다
err_sys("write error");
}
필요하시다면 코드 모두 적어드리겠습니다