Heim  >  Artikel  >  php教程  >  Verwenden Sie das aktuelle Programm, um die maximale Paketgröße der UDP-Sendto-Funktion zu testen: 65507

Verwenden Sie das aktuelle Programm, um die maximale Paketgröße der UDP-Sendto-Funktion zu testen: 65507

坏嘻嘻
坏嘻嘻Original
2018-09-14 10:12:133747Durchsuche

Das Beispiel in diesem Artikel beschreibt die UDP-Kommunikationsmethode der Socket-Kommunikation von PHP. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Wir wissen, dass der IP-Paket-Header eine Länge von 16 Bit hat und der entsprechende binäre Maximalwert 2^16 -1 beträgt, was bedeutet, dass der Maximalwert der gesamten Länge von Ein IP-Paket besteht aus 2^16 - 1 Wörtern. Wenn die UDP-Kommunikation berücksichtigt wird, sind nach dem Entfernen der 20 Bytes des IP-Headers und der 8 Bytes des UDP-Headers immer noch 2^16 - 1 - 20 - 8 Bytes vorhanden links. Spielen wir mit dem Programm (in diesem Artikel wird nur der Client zum Senden von Daten als Beispiel verwendet).

Programm:

#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;
}

Ergebnis:

Sendegröße ist 65507, iRet ist 65507, errmsg[Erfolg]

Okay, vergrößern wir die Sendegröße um 1 Byte. Versuchen Sie:

#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;
}

Ergebnis:

Sendegröße ist 65508, iRet ist -1, errmsg[Nachricht zu lang]

Verwandte Empfehlungen:

PHP-Socket-Kommunikation (TCP/UDP) Beispielanalyse_php-Kenntnisse

PHP-Socket-Kommunikation UDP-Kommunikationsbeispiel_php-Kenntnisse

Das obige ist der detaillierte Inhalt vonVerwenden Sie das aktuelle Programm, um die maximale Paketgröße der UDP-Sendto-Funktion zu testen: 65507. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Schnelle Studiennotizen 1 Hallo WeltNächster Artikel:Keiner