>  기사  >  php教程  >  실제 프로그램을 사용하여 udp sendto 기능의 최대 패킷 크기를 테스트하십시오---65507

실제 프로그램을 사용하여 udp sendto 기능의 최대 패킷 크기를 테스트하십시오---65507

坏嘻嘻
坏嘻嘻원래의
2018-09-14 10:12:133785검색

본 글의 예시에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Swift 연구 노트 1 Hello World다음 기사:없음