서버에서
strcpy(data,"test");
send(ClientSocket, data, strlen(data), 0);
이렇게 보내고
클라이언트에서
read(ClientSocket, buffer, sizeof(ClientSocket));
printf("buffer : %s\n",buffer);
이렇게 받거든?
근데 서버 띄우고 클라이언트 실행시키면
buffer : test▒▒▒|▒▒
처럼 됨 보니깐 test는 제대로 간거봐서는 배열은 제대로 전달되었는데 뒤에 무슨 이상한 데이터가 막 붙어있네
왜 이런 데이터가 붙는거임? 그리고 int형 전달할때는 htonl 이랑 ntohl 같은걸로 바이트 오더 변환하고 그랬는데 배열은 안그래도됨?
strcpy(data,"test");
send(ClientSocket, data, strlen(data), 0);
이렇게 보내고
클라이언트에서
read(ClientSocket, buffer, sizeof(ClientSocket));
printf("buffer : %s\n",buffer);
이렇게 받거든?
근데 서버 띄우고 클라이언트 실행시키면
buffer : test▒▒▒|▒▒
처럼 됨 보니깐 test는 제대로 간거봐서는 배열은 제대로 전달되었는데 뒤에 무슨 이상한 데이터가 막 붙어있네
왜 이런 데이터가 붙는거임? 그리고 int형 전달할때는 htonl 이랑 ntohl 같은걸로 바이트 오더 변환하고 그랬는데 배열은 안그래도됨?
아 저거 printf %s\\n인데 오타난거다
strlen(data) + 1 로 보내야 null terminated string 이 완성되지.
그리고 sizeof(ClientSocket) 이게 말이 되냐?
헐시발 나 병신인듯 그러네 왜 저따구로 써놨지
아 그럼 strlen()+1 씩 보내고 읽으면되는건가?
글쓴이 API 학습능력 애미없네
오 그러네 ㄳ NULL 이 안보내져서 문제였구나. 고마워
근데 그러면 바이트 오더는 왜 안바꿔줘도 되는거? 원래 다 바꿔야하는거 아님?
받는쪽에선 크기를 알 수있는 다른 인터페이스를 사용해야지. 개념읍네 ㅡ, .ㅡ 다른 애들이 짠 예제나 좀 똑바로 봐봐.
char형은 1 byte이기 때문에 엔디안 상관 없음.
바이트 오더는 1바이트보다 큰 정수, 부동소수 같은 자료형에나, 그리고 이형장비일때나, 별도로 엔디언을 지정했을때나 의미있는거지.
아 그렇구나 1byte 라서 상관없는거구나 이해됨 ㄳㄳ
dd횽 recv() 를 사용하라는거야? 아 이거 나 우리형이 준 PPT보고 하는건데 예제가 좀 이상한게 많아서 joinc wiki 보면서 하는데 아직 좀 헷갈리는게 많은듯
리눅스에서 돌리는건데, read나 recv나 암거나 써도 된다고해서 read썼는데 recv쓰는게 낫나?
크기를 뭘로 알아올지 고민해보라고 자꾸 허접한걸로 묻지만 말구. 스스로 찾는것도 공부다
read에서 소켓꺼 읽어주는게 신기하네
거의 모든 장치가 파일로 마운트되어있어서 그렇지뭐
모든 장치는 열고 읽고쓰고 닫는다의 세가지 과정을 공통적으로 가짐. 덤으로 권한관리도 가짐. 만약 열거나 닫는 과정이 필요없다면, 이미 처음부터(부팅된 시점부터) 열려있는거임.