일반적인 소켓버퍼 기본값이 8192 bytes 잖아.
즉, 저거 초과하면 여러번씩 수신 이벤트가 발생되더라고.
근데 난 이게 시작과 끝을 어떻게 구분하는지 모르겠는데,
그냥 소켓 파일 송수신 예제면 되겠지 싶어서,
찾아봤더니, 이게 그냥 아예 연결하자마자 데이터 밀어넣고, 다 넣으면 그냥 연결을 끊어버리는 식이더라고.
8192 넘어가면 딱 그런거 밖에 없음?
소켓 하나 새로 열고 전송 끝나면 바로 닫아버리고???
아니면 그냥 보낼 규격을 정해서
시그니쳐같은걸 만들어서
시작바이트 몇개 설정하고, 끝바이트 몇개 설정하고 그런식으로 해야됨???
Transport layer 에서 reliable transfer 를 보장하잖음. 그리고 패킷 스위칭 배우면 패킷단위로 끊어서 보냄. 그런 자르고 보내는 건 OSI 3 레이어 아래녀석들이 하는 거 - dc App
넹 그런식으로 보냅니당
데이터에 헤더를 붙여서 총 어느 정도의 크기를 수신해야되는지 먼저 받은 다음, 일정 크기로 잘라서 보내면서 그걸 합치고 마지막에 크기가 일치하는지 확인하면 됨.
중간에 잡데이터가 끼면 걸러낼 수 있도록 매 전송마다 머리와 꼬리를 만들어서 그걸 확인하면서 파싱해서 합치는 방법도 좋음.
근데 "어디가 헤더 시작인가"하는게 좀 헷갈림. 연속해서 보내다가 한중간에 헤더가 들어갈수도 있는거 아님... 길이는 있기야 하지만, 그거 찾는것도 꽤 귀찮겠네. ㅡ.ㅡ
진짜 결국 다 헤드와 테일을 만들거나, 매번 새 소켓으로 해결해야하는거 같음. ㅠㅠ
생각해보니 멀티소켓으로 하려면 혼란스럽네. ㅠㅠ C#은 usertoken같은거 있던데, winsock은 그딴거 없더라고. 중간에 데이터가 섞이지 않도록 하는것도 보통일이 아니네. 여러 정보 감사여. ㅠㅠ
클라에서 보낼 때: {xx와 관련된 정보 총 110kb를 150조각으로 보내겠음}{조각1: xxx}{조각2: xxx}...{조각150: xxx}{정보 끝}
ㄴ ㄳㄳ