소켓 프로그래밍 코드에서 오류 찾아주실 수 있으실까요??
글쓴이: hongachi7109 / 작성시간: 수, 2020/04/29 - 11:17오후
어제부터 계속 이거 관련으로 글을 쓰고있는데...미리 죄송하다는 말씀을 드립니다..
근데 소켓프로그래밍을 처음해봐서ㅠㅠ 해결을 못해서 질문드립니다.
제가 원하는건
1. client에서 사용자 입력을 받아 server로 메세지 전송
2. server는 client에서 받은 메세지 출력
3. server는 사용자 입력을 받아 client로 전송
4. client는 server에서 받은 메세지 출력
이 과정을 종료 문자열이 들어올 때 까지 반복해야 합니다.
아래로는 제 코드 입니다. (핵심 부분만 들고왔습니다)
-server code
while(1){ while(recv(client_socket, buff_rcv, sizeof(buff_rcv),0)<=0){ printf("no message recv\n"); } if(!strncmp("bye\n", buff_rcv, 4)){ printf("exit chatting program\n"); close(client_socket); break; } //recv msg from client printf("[server recv] : %s\n", buff_rcv); //send msg to client printf("[server send] : "); scanf("%[^\n]", buff_snd); getchar(); send(client_socket, buff_snd,sizeof(buff_snd),0); } }
-client code
while(1){ printf("[client send] : "); scanf("%[^\n]", buff_snd); getchar(); send(client_socket, buff_snd, sizeof(buff_snd),0); memset(buff_snd, 0, sizeof(buff_snd)); while(recv(client_socket, buff_rcv, sizeof(buff_rcv),0)<0){ printf("no message recv\n"); } printf("[client recv] : %s\n", buff_rcv); memset(buff_rcv,0, sizeof(buff_rcv)); }
이 코드를 실행하면 결과값이
[client send] : msg
[server recv] : msg
[server send] : <- 여기서 더이상 작동이 안됩니다
세그폴트 오류가 나는 것도 아니고 그냥 진행이 안됩니다...
GDB로 디버깅 해봤는데 오류나서 멈추는게 아니고 그냥 진행이 안되는거라 오류가 어디서 난건지 밝힐 수가 없더라고요
도움 부탁드립니다ㅠㅠ
Forums:
서버가 딱 scanf로 입력을 받아야 할 때쯤에 멈춘
서버가 딱 scanf로 입력을 받아야 할 때쯤에 멈춘 게 의미심장하군요.
1. 서버와 클라이언트를 어떻게 (어떤 환경에서) 실행했습니까?
2. 해당 시점에서 서버는 표준 입력을 읽을 수 있는 상태였습니까?
3. 해당 시점에서 귀하는 표준 입력으로 뭐라도 입력해 보았습니까?
리눅스에서 실행했고 scanf로 입력을 읽었는지
리눅스에서 실행했고 scanf로 입력을 읽었는지 확인해보고 싶은데 scanf 다음 코드부터 아예 실행이 안된것 같습니다 확인 코드를 넣어봤는데 실행이 안되었거든요... 입력을 넣으면 콘솔창에 제가 입력한 표준입력은 뜨지만 아무것도 진행이 일어나지 않습니다.
그러면 scanf에서 멈춰 있나 보군요.
그러면 scanf에서 멈춰 있나 보군요.
아무거나 막 타이핑하고 엔터도 막 연타하고 해보세요.
그리고 서버와 클라이언트를 어떻게 실행했냐고 여쭤본
그리고 서버와 클라이언트를 어떻게 실행했냐고 여쭤본 것은 OS를 궁금해 한 게 아니라,
예컨대 터미널 하나에서 둘 다 동시에 실행했는지, 아니면 별도의 터미널에서 실행했는지를 확인하려는 겁니다.
앗 그렇군요 터미널 하나에서 동시에 실행했습니다
앗 그렇군요 터미널 하나에서 동시에 실행했습니다 서버는 백그라운드로 돌렸구요
scanf는 아무거나 막쳐서 연타해봤는데 아무 반응이 없네요..
어쩐지. 그럴 것 같았지요.
어쩐지. 그럴 것 같았지요.
백그라운드로 넘어간 프로세스는 터미널로부터 표준 입력을 받을 수 없으며, 그걸 시도하면 block 됩니다.
https://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html
감사합니다ㅠㅠㅠ오류 원인을 몰라 끙끙거렸는데 드디어
감사합니다ㅠㅠㅠ오류 원인을 몰라 끙끙거렸는데 드디어 이유를 알았네요!!
뻘댓글
목록에서는 댓글이 두 개 있다고 하는데 하나밖에 안 보이는군요.
이럴 땐 댓글을 하나 더 달면 다 보이게 되곤 해서 뻘댓글 하나 답니다. 버그인가;;
뻘댓글 2
이번엔 목록에서 여섯 개 있다는데 다섯 개밖에 안 보이는군요.
뻘댓글 하나 더 답니다. 양해 바랍니다.
terminal 2개를 열어서 각각 실행하면 해결되는
terminal 2개를 열어서 각각 실행하면 해결되는 문제 같군요.
댓글 달기