2011年10月10日月曜日

socket API を使ってみる

ここを参考にした。というか、まんま書いた。


1、TCP_SERVERを書く。


2、TCP_Clinetを書く。


3、プログラムを実行
・ 192.168.11.3でサーバを実行。
・ 192.168.11.4でクライアントを実行。


4、tcpdumpを取る。
サーバ側でtcpdumpを実行してパケットを取得した。


5,netstatを確認する。
 サーバ側でnetstat -lanputを確認すると、
 tcp        0      0 0.0.0.0:12345               0.0.0.0:*                   LISTEN      32738/tcp_server   

サーバ側プログラムで、tcpコネクションを閉じる前にsleep(10)するように、
変更。クライントを複数立ち上げて、サーバ側でnetstat -lanputを確認すると、
tcp        0      0 0.0.0.0:12345               0.0.0.0:*                   LISTEN      32738/tcp_server   
tcp        0      0 192.168.11.3:12345          192.168.11.4:43978          ESTABLISHED -                  
tcp        1      0 192.168.11.3:12345          192.168.11.4:43977          CLOSE_WAIT  32738/tcp_server



最初に立ち上げたクライントは、「CLOSE_WAIT」、
2番目に立ち上げたクライアントは、「ESTABLISHED」という状態になり、
サーバからの出力は受信できていなかった。
これは、サーバ側プログラムのプロセスが1つしか無いからか?。
apacheとかなら、接続毎にプロセスを複製するから、
複数のクライアントがいても、同時に対処できるのか?

TCPの状態は、ここも参考になった。



0 件のコメント:

コメントを投稿