본 글의 예시에서는 PHP의 소켓 통신 중 UDP 통신 방식을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
우리는 IP 패킷 헤더의 길이가 16비트이고 해당 바이너리 최대값이 2^16-1이라는 것을 알고 있습니다. 이는 IP 패킷 전체 길이의 최대값이 2^16 - 1바이트입니다. UDP 통신의 경우 IP 헤더 20바이트와 UDP 헤더 8바이트를 제거한 후에도 여전히 2^16 - 1 - 20 - 8바이트가 남아 있습니다. 프로그램을 가지고 놀아봅시다. (이 글은 클라이언트를 사용하여 데이터를 전송하는 예시입니다.)
프로그램:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <errno.h> int main(int argc, char *argv[]) { struct sockaddr_in srvAddr; bzero(&srvAddr, sizeof(srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); srvAddr.sin_port = htons(8888); int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp char szBuf[1024 * 64 -1 - 20 - 8] = {0}; int iRet = sendto(iSock, szBuf, sizeof(szBuf), 0, (struct sockaddr *)&srvAddr, sizeof(srvAddr)); printf("send size is %d, iRet is %d, errmsg[%s]\n", sizeof(szBuf), iRet, strerror(errno)); close(iSock); return 0; }
결과:
send size is 65507, iRet is 65507, errmsg[Success]
좋아요, send 크기를 1바이트 더 크게 만들어 보겠습니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <errno.h> int main(int argc, char *argv[]) { struct sockaddr_in srvAddr; bzero(&srvAddr, sizeof(srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); srvAddr.sin_port = htons(8888); int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp char szBuf[1024 * 64 - 20 - 8] = {0}; int iRet = sendto(iSock, szBuf, sizeof(szBuf), 0, (struct sockaddr *)&srvAddr, sizeof(srvAddr)); printf("send size is %d, iRet is %d, errmsg[%s]\n", sizeof(szBuf), iRet, strerror(errno)); close(iSock); return 0; }
결과 :
send size is 65508, iRet is -1, errmsg[Message too long]
관련 권장 사항:
php 소켓 통신(tcp/udp) 예제 분석_php 기술
UDPPHP 소켓 통신 예제 communications_php 스킬
위 내용은 실제 프로그램을 사용하여 udp sendto 기능의 최대 패킷 크기를 테스트하십시오---65507의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!