UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)

Slides:



Advertisements
Similar presentations
TCP/IP によるチャットプログラ ム 薄井 秀晃. 基礎知識編 TCP/IP とは? IP とは・・・ Internet Protocol の略称であり通信方法の技術的なルールで あり、実際にデータを送受信する前にデータを小さなデータ に分割し、それに発信元と受信先の IP アドレスを付加させて.
Advertisements

プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムコール 低水準入力 ファイルディスクリプタ ソケット
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
ネットワークプログラミング 第7回「ネットワークとプログラミング(2)」
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
システムプログラミング 第13回 情報工学科 篠埜 功.
CS-B3 ネットワークプログラミング 峰野博史
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
Windows Network Programming
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
輪講: 詳解TCP/IP ACE B3 suzuk.
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
トランスポート層.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
第5回ネットワークプログラミング 中村 修.
Parallel Programming in MPI part 1
第11回ネットワークプログラミング 中村 修.
システムプログラミング 第13回 プロセス間通信(続き) 情報工学科 篠埜 功.
第7回ネットワークプログラミング 中村 修.
システムプログラミング 第13回 情報工学科 篠埜 功.
UDPマルチキャストチャット                    空川幸司.
ソケットプログラム(TCP,UDP) EasyChat開発
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
ソケットプログラム(TCP,UDP) EasyChat開発2
インターネットにおける真に プライベートなネットワークの構築
ユビキタスシステムアーキテクチャ 第5回 ネットワークプログラミングの基礎
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
UDPマルチキャストチャット    空川幸司.
ネットワークプログラミング (5回目) 05A1302 円田 優輝.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
演習1の解答例の解説 2006年11月8日 海谷 治彦.
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
ネットワーク・プログラミング ソケットオプションとスレッド.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter.
疑似乱数, モンテカルロ法によるシミュレーション
B演習(言語処理系演習)第2回 田浦.
岡村耕二 TCP通信プログラム 課題と回答例 岡村耕二 情報ネットワーク.
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
高度プログラミング演習 (11).
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
ネットワーク・プログラミング 非同期I/Oとスレッド同期制御.
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング ソケットプログラミングと共有メモリ.
ネットワーク・プログラミング 1対多のプロセス間通信.
岡村耕二 UDP通信プログラム 課題と回答例 岡村耕二 情報ネットワーク.
ネットワーク・プログラミング マルチタスク.
ネットワーク・プログラミング プロセスとファイルシステム管理.
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
ポートスキャン実習 2002年9月19日 修士1年 兼子 譲 牧之内研究室「インターネット実習」Webページ
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム) Python socket module: Just a thin wrapper over the underlying C library's socket calls. UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム) UDP-echoサーバCプログラム(ソケットによる単純接続のリンクを作成 ) UDP-echoサーバCプログラム(クライアントからのメッセージの受信と返信) UDP-echoサーバPythonプログラム

UDP-echoサーバのプログラムモデル (Cプログラム) 1. socket()を実行 (ソケット作成) ↓ 2. bind() (ソケットにポート番号を割当る) 3. recvfrom()とsendto()を実行(データ通信を行う) int recvfrom(int socket, const void *msg, unsigned int msgLength, int flags, struct sockaddr *srcAddr, unsigned int *addrLen) int sendto(int socket, const void *msg, unsigned int msgLength, int flags, struct sockaddr *destAddr, unsigned int addrLen) 4. close()を実行 (ソケット削除) UDPEchoClient UDPEchoServer ソケットリンク接続 socket() bind() socket() Echo sendto() recvfrom() Echo recvfrom() sendto() ソケットリンク開放 close() close()

サーバで利用するソケット関数 (Cプログラム) サーバのアドレス ソケットにポート番号を割当る int bind(int socket, struct sockaddr *localAddress, unsigned int addressLength) 戻値:成功: 0、失敗: -1 sendto() サーバ プログラム UDP recvfrom() サーバのソケット クライアント1 クライアント2 ソケットにポート番号を割当る bind

UDP-echoサーバCプログラム (ソケットによる単純接続のリンクを作成 ) UDPEchoServer.c DieWithError.c #define ECHOMAX 255 /*エコー文字列の最大長 */ int main(int argc, char *argv[]) { int sock; /*ソケット識別子 */ struct sockaddr_in echoServAddr; /* ローカルアドレス */ struct sockaddr_in echoClntAddr; /* クライアントアドレス */ unsigned int cliAddrLen; /* 着信メッセージ長 */ char echoBuffer[ECHOMAX]; /* エコー文字列用バッファ */ unsigned short echoServPort; /* サーバのポート番号 */ int recvMsgSize; /* 受信メッセージ長 */ echoServPort = atoi(argv[1]); /* 1つ目の引数: ローカルアドレス */ /* データグラムの送受信に使うソケットを作成 */ if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)  DieWithError("socket() failed"); /* ローカルのアドレス構造体を作成 */ memset(&echoServAddr, 0, sizeof(echoServAddr)); /* 0を埋める */ echoServAddr.sin_family = AF_INET; /* インタネットアドレスファミリ */ echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* ワイルドカード */ echoServAddr.sin_port = htons(echoServPort); /* ローカルポート */ /* ローカルアドレスへバインド */ if (bind(sock, (struct sockaddr *) &echoServAddr,sizeof(echoServAddr)) < 0)  DieWithError("bind() failed"); UDPEchoClient UDPEchoServer ソケットリンク接続 socket() bind() socket() Echo sendto() recvfrom() Echo recvfrom() sendto() ソケットリンク開放 close() close() bindでソケットにローカルアドレスを設定後、直に受信出来る(listen()不要)

UDP-echoサーバCプログラム (クライアントからのメッセージの受信と返信) UDPEchoClient UDPEchoServer クライアント毎にaccept()を実行して、ソケットを作る必要がない for (;;) /* 繰返し実行 */ { /* 入出力パラメータのサイズをセット */ cliAddrLen = sizeof(echoClntAddr); /* クライアントからのメッセージ待ち */ if ((recvMsgSize = recvfrom(sock, echoBuffer, ECHOMAX, 0,(struct sockaddr *) &echoClntAddr, &cliAddrLen)) < 0) DieWithError("recvfrom() failed"); printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); /* 受信したデータグラムをクライアントに返信 */ if (sendto(sock, echoBuffer, recvMsgSize, 0,(struct sockaddr *) &echoClntAddr, sizeof(echoClntAddr)) != recvMsgSize) DieWithError("sendto() sent a different number of bytes than expected"); } /* ここには到達しない */ ソケットリンク接続 socket() bind() socket() Echo sendto() recvfrom() Echo recvfrom() sendto() 1ソケットから複数のIPアドレスへ送信 ソケットリンク開放 close() close()

UDP-echoサーバPythonプログラム UDPEchoServer.py from socket import * my_host = "" recv_port = 50007 send_port = recv_port +1 def test(): sock_obj = socket(AF_INET, SOCK_DGRAM, 0) sock_obj.bind((my_host, recv_port)) # Infinte loop while 1: data, address = sock_obj.recvfrom(1024) if data: print "Server received data : ", str(data) else: print "No data recevied" break sock_obj.sendto("Echo>=" + str(data), (address[0], send_port)) sock_obj.close() if __name__ == '__main__': print "UDPEchoServer", recv_port, send_port test() UDPEchoClient UDPEchoServer Echo socket() sendto() recvfrom() close() bind() ソケットリンク接続 ソケットリンク開放