인터넷 소켓 (UDP)을 통해 데이터를 전송하는 프로그램이 있습니다. 따라서 데이터 패킷으로 char 배열이 정의됩니다. 예 : char packet1[] = 11
(헤더 [2 자리]) + 192.168.100.158
(sender_IP [15 자리]) + 006
(TTL [3 자리]) + (11192.168.100.158006...
). 수신기는 배열 색인에 따라 데이터를 추출합니다 (예 : 0-1은 헤더, 2-16은 sender_IP).C 소켓의 데이터 전송
내 문제가 I [2-16]와 같은 경우 sender_IP을 정의 할 때 IP 어드레스가 15 자리보다 짧은 (예를 들면 192.168.100.5) 다음, 수신기는 데이터가 잘못 추출이 있다는 것이다. 내 질문에 IP 주소가 15 자리 또는 14 자리 (sender_IP의 문자열 길이를 정의하는 추가 문자를 추가하지 않고도) 인 경우에도 sender_IP가 올바르게 추출되는지 어떻게 확인할 수 있습니까?
나는`struct packet {
char header[1];
char senderIP[15]
, TTL[2];
};
같은 것을 구조체 유형을 작성하고 정의 생각했다. 그러나 나는 buf
대신에 sendto(s, buf, BUFSIZE, 0,(struct sockaddr *) &si_other, slen)
을 작성해야한다. 왜냐하면 buf
은 내가 아는 한 char 일 필요가 있기 때문이다. 일부 데이터를 sender_IP
주소 (inet_aton(sender_IP, &si_other.sin_addr)
으로 보내면 ASCII 표현으로 IP 주소가 필요합니다.
나는 모든 제안을 부탁드립니다. 미리 감사드립니다.
1) 공백으로 채 웁니다. 2) nul-terminate? – wildplasser
그건 그렇고, buf는 char * 일 필요는없고, struct 나 다른 타입의 포인터 일 수도 있지만, 플랫폼과 컴파일러 사이의 차이점과 패킹과 엔디 언스로 인해 소켓을 통해 직접 구조체를 보내고 싶지는 않습니다 . –