UDP-echo通信のモデル Python socket module: Just a thin wrapper over the underlying C library's socket calls. UDP-echo通信のモデル UDP-echo通信のモデルとプログラミングための背景知識 UDPプロトコル UDP-echoのデータ通信手順 UDPで利用するソケット関数(Cプログラム) TCPとUDPでのサーバソケットの役割の違い UDPソケットの簡略化されたメッセージ送受信 UDP-echo動作テスト( Cプログラム・Client/Serverは個別の端末) UDP-echo動作テスト( Cプログラム・Client/Serverは端末を共有) UDP-echo動作テスト(Pythonプログラム・Client/Serverは個別の端末) UDP-echo通信のモデル UDPプロトコル UDP機能 IP層にホストアドレスと は別のアドレッシング (ポート番号)層を追加 破損したデータグラムは、 廃棄 UDPを利用する場合は、 データグラムの紛失、順 番の入替わり有に対処 する必要有 データの信頼性の確保 はAPの責任 AP AP ソケット ソケット UDP IP ホスト TCP TCP 通信 チャネル IP ルータ 通信 チャネル UDP IP ホスト UDP-echo通信のモデル UDP-echoのデータ通信手順 UDPEchoClient UDPEchoServer ソケットリンク接続 socket() sendto() socket() bind() Echo ソケット作成 ソケットにポート 番号を割当る recvfrom() データ通信を行う recvfrom() Echo sendto() ソケットリンク開放 close() close() ソケット削除 UDP-echo通信のモデル UDPで利用するソケット関数 (Cプログラム) • 送信時、アドレスを指定(複数のアドレスへ送信可能) 宛先アドレスを指定 int sendto(int socket, const void *msg, unsigned int msgLength, int flags, struct sockaddr *destAddr, unsigned int addrLen) • 受信時、送信元アドレスを通知(複数のアドレスから受信可能) int recvfrom(int socket, const void *msg, unsigned int msgLength, int flags, struct sockaddr *srcAddr, unsigned int *addrLen) 受信メッセージの送信元アドレス APプログラム *srcAddr recvfrom(..,*srcAddr,…) システム コール 書込む メッセージ受信 *addrLen UDP-echo通信のモデル TCPとUDPでのサーバソケットの役割の違い UDPソケットは作成後、すぐに送受信に使用できる (接続を確立しなくてもよい) 送信時、アドレスを指定(複数のアドレスへ送信可能) 受信時、送信元アドレスを通知(複数のアドレスから受信可能) サーバ プログラム サーバ プログラム サーバの ソケット listen() accept() sendto() recvfrom() accept() サーバのソケット クライアント2用 ソケット TCP クライアント1 クライアント2 UDP クライアント1 クライアント2 UDP-echo通信のモデル UDPソケットの簡略化されたメッセージ送受信 メッセージ境界 sendto()とrecvfrom()は1対1 recvfrom()実行時、メッセージが受信バッファ長よりも大きい 場合、受信バッファ長だけ受信 sendto() メッセージ recvfrom() メッセージ AP プログラム UDP UDPのソケットオブジェクトには、 複数メッセージをまとめたり、1 メッセージを分割したりする機能 は具備されていない。 受信バッファ recvfrom() メッセージ コピー 廃棄 UDP-echo通信のモデル UDP-echo動作テスト ( Cプログラム・Client/Serverは個別の端末) UDPEchoClient $ gcc -o UDPEchoServer UDPEchoServer.c DieWithError.c $ ./UDPEchoServer 5000 Handling client 150.43.220.22 Handling client 150.43.220.22 $ gcc -o UDPEchoClient UDPEchoClient.c DieWithError.c $ ./UDPEchoClient 150.43.220.22 “Echo" 5000 Received: Echo $ ./UDPEchoClient 150.43.220. 22 “Hello" 5000 Received: Hello $ UDPEchoServer Echo Echo Hello Hello UDP-echo通信のモデル UDP-echo動作テスト ( Cプログラム・Client/Serverは端末を共有) UDPEchoClient $ gcc -o UDPEchoServer UDPEchoServer.c DieWithError.c $ gcc -o UDPEchoClient UDPEchoClient.c DieWithError.c $ ./UDPEchoServer 5000 & [1] 11972 $ ./UDPEchoClient 150.43.220.22 Echo 5000 Handling client 150.43.220.22 Received: Echo $ ./UDPEchoClient 150.43.220.22 Hello 5000 Handling client 150.43.220.22 Received: Hello $ UDPEchoServer Echo Echo Hello Hello UDP-echo通信のモデル UDP-echo動作テスト ( Pythonプログラム・Client/Serverは個別の端末) prompt $N:$D:$S E:> UDPEchoServer.py UDPEchoServer 50007 50008 Server received data : Hello network world Server received data : Hello network world prompt $N:$D:$S E:> UDPEchoClient.py UDPEchoClient localhost 50007 Client received data : Echo>=Hello network world E:> UDPEchoClient.py UDPEchoClient localhost 50007 Client received data : Echo>=Hello network world E:> UDPEchoClient UDPEchoServer Hello network world Echo>=Hello network world Hello network world Echo>=Hello network world
© Copyright 2024 ExpyDoc