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