환경 linux, c, tcp, 1:1 통신
client에서 server로 얼만큼의 data를 보낼지 정해지지 않았습니다
(최대 길이는 정했습니다)
8글자씩 2회로 나눠서 보낼 수도 있고
255글자 1회에 쭉 보낼 수도 있습니다
문제가 뭐냐하면
read나 recv 함수로 최대 길이 만큼 받도록 지정해놓으면
server가 최대 길이를 다 받기 전까지 계속 함수를 대기하는게 문제입니다
그래서 client가 send 함수를 2회 호출해도 server에서는 하나의 문자열로 취급하는게 문제이지요
그렇기 때문에 제가 방안을 생각해낸 것이 몇 가지 있습니다
1. client가 server에게 메세지를 보낼 때 1회 보내고 close하고
또 socket을 열어서 또 보내고 이런 미친짓을 한다 -> 패스 말 그대로 미친짓
2. 일종의 자신만의 통신 규칙을 만든다
어차피 client가 500회 send(write) 함수를 호출하든 말든 server는 하나의 긴 문자열로 받게 되므로
server에서 들어오는 문자열을 알아서 잘 파싱하든지 8글자 단위로 쪼개든지 해서 해석한다
물론 8의 배수가 안되는 길이를 client가 보내려고 하면 알아서 패딩해야함
그리고 client도 알아서 보내고 싶은 메세지간 토큰 잘 끼어 넣어야함
3. 1글자씩 보낸다 ^^
write(socket_fd, (char*) chr, 1);
read(socket_fd, buf, 1);
원래 이런식으로 해야합니까...
그냥 send/write로 char* 문자열 보낼 때 거기에 일종의 EOF나 기타 등등 뭐 껴서 보내면
recv/read가 ㅇㅋ 님 다 보내셨근영 하고 함수 종료하는거 그런거 없습니까?
(소켙을 닫는다는 의미가 아니라)
못알아듣겠네, 논블로킹 이런거 원하는건가..-_-
1:n은 아니넹. ㅇㅇ
그러면 타임스탬프 잘 끼워 넣으면 되지 않냐 ? 아니면 일종의 같은 문자열이라는 것을 알려줄 인덱스라던가.. 처리는 서버에서 ㅇㅇ
종료 메세지를 하나 정해서 그거 날라가면 종료 하면 되지뭐..