1. 클라이언트가 받자 마자 출력해야 되는 경우
서버는 1000을 보내도 클라이언트는 100밖에 못받는다. 하지만, 받자 마자 출력해야 된다. 이런 경우에는 데이터를 받자 마자 끝부분(마지막 바이트)의 유효성을 검사해보세요. 만약 이것이 공백/일반 영문자/일반 아스키라면 출력을 해주고 아니면 다음에 따라올 데이터에 붙여서 완성해주세요. 한글은 2바이트니깐 뒤에 붙여서 해주시면 될겁니다.
대부분 패킷정의를 할 때 (1)각 패킷의 크기를 고정시키는 방법이 있구요. (2)각 패킷이 어떻게 끝나는지를 정의하고 크기는 유동적으로 하는 방법이 있습니다.
(1)의 경우로 한다면 패킷의 크기는 클라이언트에서 받을 수 있는 크기보다 같거나 작아야 할 것이구요, 그래서 서버측에서 보내야 할 데이터가 크다면 패킷에 나누어 보내야 합니다. 이 경우 패킷의 헤더 혹은 테일에 continue flag를 정의해서 뒤에 더 올 데이터가 있다/없다 를 표시하면 됩니다.
(2)의 경우라면 패킷이 어떻게 끝나는지 정의되어 있으므로, 서버측에서는 데이터의 길이에 상관없이 한꺼번에 다 보내도 됩니다.
참고로 말씀드려서
IP v4(흔히 사용하는) 의 Socket Buffer 의 크기는 16bit 즉 64k 입니다.
다시말해서 한번에 받을수 있는 크기는 64k 를 넘지 않는다는 얘기입니다.
128k 를 받았다면 뭔가 잘못 아신게 아닌가 싶네요
그리고 경험상 플랫폼에 따라서 그리고 어떻게 처리되느냐에 따라서
크기가 64k, 48k, 32k 변하더군요
그러니 특정 size 에 의존하지 않는것이 좋을듯 싶네요
안녕하세요. 정확히 어떠한것을 원하시는지 몰라서 제가 대강 추측해봅니다.
안녕하세요. 정확히 어떠한것을 원하시는지 몰라서 제가 대강 추측해봅니다.
1. 클라이언트가 받자 마자 출력해야 되는 경우
서버는 1000을 보내도 클라이언트는 100밖에 못받는다. 하지만, 받자 마자 출력해야 된다. 이런 경우에는 데이터를 받자 마자 끝부분(마지막 바이트)의 유효성을 검사해보세요. 만약 이것이 공백/일반 영문자/일반 아스키라면 출력을 해주고 아니면 다음에 따라올 데이터에 붙여서 완성해주세요. 한글은 2바이트니깐 뒤에 붙여서 해주시면 될겁니다.
2. 데이터의 끝을 알수가 있으면 데이터의 전송이 끝난후에 모아서 출력해주기.
이렇게 하면 해결되지 않을까요.?
그렇습니다.대부분 패킷정의를 할 때 (1)각 패킷의 크기를 고정시
그렇습니다.
대부분 패킷정의를 할 때 (1)각 패킷의 크기를 고정시키는 방법이 있구요. (2)각 패킷이 어떻게 끝나는지를 정의하고 크기는 유동적으로 하는 방법이 있습니다.
(1)의 경우로 한다면 패킷의 크기는 클라이언트에서 받을 수 있는 크기보다 같거나 작아야 할 것이구요, 그래서 서버측에서 보내야 할 데이터가 크다면 패킷에 나누어 보내야 합니다. 이 경우 패킷의 헤더 혹은 테일에 continue flag를 정의해서 뒤에 더 올 데이터가 있다/없다 를 표시하면 됩니다.
(2)의 경우라면 패킷이 어떻게 끝나는지 정의되어 있으므로, 서버측에서는 데이터의 길이에 상관없이 한꺼번에 다 보내도 됩니다.
한글(2byte 문자들)의 문제는 어차피 합쳐서 보여줄 것이므로 상관 없습니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
참고로
참고로 말씀드려서
IP v4(흔히 사용하는) 의 Socket Buffer 의 크기는 16bit 즉 64k 입니다.
다시말해서 한번에 받을수 있는 크기는 64k 를 넘지 않는다는 얘기입니다.
128k 를 받았다면 뭔가 잘못 아신게 아닌가 싶네요
그리고 경험상 플랫폼에 따라서 그리고 어떻게 처리되느냐에 따라서
크기가 64k, 48k, 32k 변하더군요
그러니 특정 size 에 의존하지 않는것이 좋을듯 싶네요
댓글 달기