Maison > php教程 > PHP开发 > le corps du texte

Utilisez le programme réel pour tester la taille maximale des paquets de la fonction udp sendto --- 65507

坏嘻嘻
Libérer: 2018-09-14 10:12:13
original
3759 Les gens l'ont consulté

L'exemple de cet article décrit la méthode de communication UDP de la communication Socket de PHP. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

Nous savons que l'en-tête du paquet IP a une longueur de 16 bits et que la valeur binaire maximale correspondante est 2^16 -1, ce qui signifie que la valeur maximale de toute la longueur de un paquet IP est une section de 2 ^ 16 - 1 mots, si la communication UDP est considérée, alors après avoir supprimé les 20 octets de l'en-tête IP et les 8 octets de l'en-tête UDP, il reste encore 2 ^ 16 - 1 - 20 - 8 octets gauche. Jouons avec le programme (cet article utilise uniquement le client pour envoyer des données à titre d'exemple).

Programme :

#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;
}
Copier après la connexion

Résultat :

la taille d'envoi est 65507, iRet est 65507, errmsg[Succès]

OK, agrandissons la taille d'envoi de 1 octet. Essayez :

#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;
}
Copier après la connexion

Résultat :

envoyer. la taille est 65508, iRet est -1, errmsg[Message trop long]

Recommandations associées :

exemple de communication de socket php (tcp/udp) compétences d'analyse_php

Exemple de communication PHP Socket Communication UDP_compétences PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!