実際のプログラムを使用して、udp sendto 関数の最大パケット サイズをテストします---65507

坏嘻嘻
リリース: 2018-09-14 10:12:13
オリジナル
3791 人が閲覧しました

この記事の例では、PHP の Socket 通信の UDP 通信方式について説明します。皆さんの参考に共有してください。詳細は次のとおりです。

IP パケット ヘッダーの長さは 16 ビットで、対応するバイナリの最大値は 2^16 -1 であることがわかっています。これは、パケットの全体の長さの最大値が 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;
}
ログイン後にコピー

結果:

送信サイズは 65507、iRet は 65507、errmsg[Success]

さて、送信サイズを 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;
}
ログイン後にコピー

結果:

送信サイズは 65508 です。 iRet は -1、errmsg[メッセージが長すぎます]

関連する推奨事項:

php ソケット通信 (tcp/udp) の例分析_php スキル

PHP ソケット通信 UDP 通信 example_php スキル

以上が実際のプログラムを使用して、udp sendto 関数の最大パケット サイズをテストします---65507の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート