죄송한데 제가 무슨 말씀인지 잘 모르겠네요. ECHO 서버인지 잘 몰겐네요. 하여간 제가 대충 억측해서 대답을 드리면 예전에 제가 한번 이런 대답을 드린적이 있는데
TCP/IP 통신에서는
1. 보내는쪽은 얼마를 보낼지 알수가 있지만 받는 쪽은 얼마를 받을지 전혀 알수가 없다.
2. 보내지는것은 받는것이 반드시 보증된다.
따라서 보낸만큼 받아야만 합니다. 않그러면 통신이 블록에 걸리게 되어 중간에 정지해 있습니다. 만약 제가 10 바이트를 보내는데 받는쪽에서 20 바이트가 올거라고 계속 기다리게 하면 고장이 난다는 것이죠.
그래서 꼭! 보내는 쪽에서 얼마를 보내니깐 받는쪽에서는 이것을 알고 있어서 그 사이즈만큼 받아야만 합니다. 예를 들면 전문을 보낼때 앞에 10 바이트에 보내는쪽에서 보내는 메시지의 크기를 지정해 놓습니다. 그러면 받는 쪽에서는 처음에 10 바이트만 받아 보면 뒤에 몇바이트가 더 올지 알수가 있으니 그 양만큼만 받게 해주면 됩니다. 이때 몇가지 처리를 해주실수가 있는데...
1. NON BLOCK MODE로 받게 한다(혹은 보낸다)
2. SELECT/ALARM등을 이용해서 TIME OUT을 설정해둔다.
이러면 거의 에러없이(정말 거의) 보내고 받을수가 있습니다. 그런데 지금 보내시는 방식이 엔터라는 구분자가 존재 하기 때문에 이것을 가지고 할수도 있습니다. 즉, 받는 쪽에서 엔터가 두번 들어 오니깐 엔터를 기준으로 두번 받게 해놓으시면 될겁니다. 즉, READ나 RECV쪽에서 받는데 중간에 엔터를 검사하게 하면 됩니다. 이것은 LOOP을 돌려 봐야 합니다.
주의 하실점은 단지 \n 개행 문자인지 \r\n(DOS 모드) 인지 확인 하시면 됩니다. 즐거운 하루 되세요.
두번 연속해서 보냈으면 두번 연속해서 받으세여(NULL)
^^
서버에서 두줄 이상을 전송할 일이 있는데, 두줄을 연속해서 전송을 하니
서버에서 두줄 이상을 전송할 일이 있는데, 두줄을 연속해서 전송을 하니
클라이언트에서는 한줄밖에 출력이 되지 않네요..
클라이언트 문제인가요?
1. 서버에 두줄이상을 전송
2. 클라이언트에는 한줄만 출력.
죄송한데 제가 무슨 말씀인지 잘 모르겠네요. ECHO 서버인지 잘 몰겐네요. 하여간 제가 대충 억측해서 대답을 드리면 예전에 제가 한번 이런 대답을 드린적이 있는데
TCP/IP 통신에서는
1. 보내는쪽은 얼마를 보낼지 알수가 있지만 받는 쪽은 얼마를 받을지 전혀 알수가 없다.
2. 보내지는것은 받는것이 반드시 보증된다.
따라서 보낸만큼 받아야만 합니다. 않그러면 통신이 블록에 걸리게 되어 중간에 정지해 있습니다. 만약 제가 10 바이트를 보내는데 받는쪽에서 20 바이트가 올거라고 계속 기다리게 하면 고장이 난다는 것이죠.
그래서 꼭! 보내는 쪽에서 얼마를 보내니깐 받는쪽에서는 이것을 알고 있어서 그 사이즈만큼 받아야만 합니다. 예를 들면 전문을 보낼때 앞에 10 바이트에 보내는쪽에서 보내는 메시지의 크기를 지정해 놓습니다. 그러면 받는 쪽에서는 처음에 10 바이트만 받아 보면 뒤에 몇바이트가 더 올지 알수가 있으니 그 양만큼만 받게 해주면 됩니다. 이때 몇가지 처리를 해주실수가 있는데...
1. NON BLOCK MODE로 받게 한다(혹은 보낸다)
2. SELECT/ALARM등을 이용해서 TIME OUT을 설정해둔다.
이러면 거의 에러없이(정말 거의) 보내고 받을수가 있습니다. 그런데 지금 보내시는 방식이 엔터라는 구분자가 존재 하기 때문에 이것을 가지고 할수도 있습니다. 즉, 받는 쪽에서 엔터가 두번 들어 오니깐 엔터를 기준으로 두번 받게 해놓으시면 될겁니다. 즉, READ나 RECV쪽에서 받는데 중간에 엔터를 검사하게 하면 됩니다. 이것은 LOOP을 돌려 봐야 합니다.
주의 하실점은 단지 \n 개행 문자인지 \r\n(DOS 모드) 인지 확인 하시면 됩니다. 즐거운 하루 되세요.
예전에 올렸던 글이 있네요..
http://kldp.org/script/bbs/read.php?table=qa2&no=584
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
댓글 달기