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!