Yahoo

TCP-echo通信のモデル
Python socket module: Just a thin wrapper over the underlying C library's socket calls.
TCPソケットプログラミング
TCP通信のモデルとプログラミングための背景知識





ソケットプログラミング
TCP-echoのデータ通信手順
TCP-echo動作テスト(Cプログラム・Client/Serverは個別
の端末)
TCP-echo動作テスト(Cプログラム・Client/Serverは端末
を共有)
TCP-echo動作テスト(Pythonプログラム・Client/Server
は個別の端末)
TCP-echo通信のモデル
ソケットによるデータ通信とTCP/IPネットワーク
IPヘッダ情報
IP
TCP
TCPヘッダ情報
データ
データ
TCP/IP
ネットワーク
•通信プログラムを作成する上では、通信相手のソケットに自分の
ソケットを繋ぐことができれば、安定した通信を行うことができる。
•安定した通信は、TCP/IPのプロトコルで自動的に対処される。
•ソケットを繋ぐことができれば、 マシン同士が、どの様な通信機器
や伝送経路を辿って、データを送受信しているかなどを気にする必
要は無くなる。
TCP-echo通信のモデル
ソケットプログラミング
データ
ソケット
• アプリケーションがデータを送
信するための仕組みを抽象
化したオブジェクト
• データの送受信は、ファイル
ソケット
I/Oとほぼ同じ
ストリームソケット
TCP使用
データグラムソケット
UDP使用
ソケットの共有
複数のアプリケーションが同一
のソケットを参照できる
AP
1
データ
データ
AP
AP
2
65535
1
2
65535
IP
TCP
TCP
UDP
IP
TCP-echo通信のモデル
TCP-echoのデータ通信手順
TCPEchoClient
socket()
connect()
データ
send()
”Hello”
TCPEchoServer
コネクション設定
socket()
bind()
listen()
accept()
”Hello”
データ
IP
recv()
TCP
データ通信を行う
recv()
close()
データ通信を行う
”Hello”
コネクション開
放
send()
close()
”Hello”
TCP-echo通信のモデル
TCP-echo動作テスト
( Cプログラム・Client/Serverは個別の端末)
TCPEchoClient
$ gcc -o TCPEchoServer TCPEchoServer.c
HandleTCPClient.c DieWithError.c
$ ./TCPEchoServer 5000
Handling client 150.43.220.22
Handling client 150.43.220.22
データ
IP
TCPEchoServer
”Yahoo”
データ
TCP
”Yahoo”
”Yahoo”
$ gcc -o TCPEchoClient TCPEchoClient.c
DieWithError.c
$ ./TCPEchoClient 150.43.220.22 "Yahoo" 5000 データ
Received: Yahoo
$ ./TCPEchoClient 150.43.220. 22 "Jazz" 5000
Received: Jazz
$
”Jazz”
IP
”Jazz”
”Yahoo”
データ
TCP
” Jazz”
”Jazz”
TCP-echo通信のモデル
TCP-echo動作テスト
( Cプログラム・Client/Serverは端末を共有)
TCPEchoClient
$ gcc -o TCPEchoServer TCPEchoServer.c
HandleTCPClient.c DieWithError.c
データ
$ gcc -o TCPEchoClient TCPEchoClient.c
DieWithError.c
$ ./TCPEchoServer 5000 &
[1] 11972
$ ./TCPEchoClient 150.43.220.22 "Yahoo" 5000
”Yahoo”
Handling client 150.43.220.22
Received: Yahoo
$ ./TCPEchoClient 150.43.220. 22 "Jazz" 5000
データ
Handling client 150.43.220.22
Received: Jazz
$
IP
TCPEchoServer
”Yahoo”
データ
TCP
”Yahoo”
IP
”Jazz”
”Yahoo”
データ
TCP
” Jazz”
”Jazz”
”Jazz”
TCP-echo通信のモデル
TCP-echo動作テスト
( Pythonプログラム・Client/Serverは個別の端末)
prompt $N:$D:$S
E:> TCPEchoServer.py
TCPEchoServer 50007
Server connected by ('127.0.0.1', 1462)
Server received data : Hello network world
No data recevied
Server connected by ('127.0.0.1', 1463)
Server received data : Hello network world
No data recevied
TCPEchoClient
データ
prompt $N:$D:$S
データ
E:> TCPEchoClient.py
TCPEchoClient localhost 50007
Client received data : Echo>=Hello network world
E:> TCPEchoClient.py
TCPEchoClient localhost 50007
Client received data : Echo>=Hello network world
E:>
TCPEchoServer
データ
Hello network world
Echo>=Hello network world
Hello network world
Echo>=Hello network world
データ