- PR -

.Net Frameworkのソケット通信のSDKについて初歩的な質問

投稿者投稿内容
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-02 09:22
お世話になっております。半人前です。

今回の質問は、もう、当会議室で扱う範疇を超えているかもしれないのですが
何卒ご容赦頂ければと思います。

−本題−

手元にあるサーバープログラムでは

@ソケットの生成、バインド、リッスンのお約束をした後
 ※一つのポートに対してのみ生成している
A複数のファイルディスクリプタの反応(接続要求があるかどうか)をチェック
Bあればデータ読み取りへ、無ければAへ

というロジックになっているのですが、本スレッドで自分が投げさせてもらった
質問に対してuguuxpさんやJittaさんに頂いたアドバイスを元に考えれば、@と
Aは明らかに矛盾していると思うのです。

ただ、この推察が正しいかどうか自信が持てるほどソケット通信に造詣が深くな
いので識者にご教示頂ければと思います。

よろしくお願いいたします。
Lichtenstein
ベテラン
会議室デビュー日: 2003/11/06
投稿数: 61
投稿日時: 2004-07-02 09:47
.Net Frameworkのソケットクラスを使用したことがある訳ではないんですが……

普通、Accept関数が通信の為の新しいソケットを返してきます。
その後、Accept関数でまた接続を受け付けられます。もちろん、前のソケットは有効なままです。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-02 10:49
すいません、訂正です。

Bあればデータ読み取りへ、無ければアクセプト

でした。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-07-02 11:59
こんにちは。

ちょっとクイズっぽくしてみましたが、以下の問題は○か×か (^^;

(Q1)
サーバ側で、ソケットの接続待ち受けで開かれるポート番号は
複数のクライアントから同時に接続可能である。

(Q2)
サーバ側で、ソケットの接続待ち受けで開かれるポート番号は
1つのクライアントが接続している間は、他のクライアント
からは接続できない。

(Q3)
サーバ側で、ソケットの接続待ち受けをするプログラムは
同じポート番号を割り当てる仕組みになっていれば
一つしか起動できない。

(Q4)
サーバ側で、ソケットの接続待ち受けをするプログラムは
違うポート番号を割り当てても一つしか起動できない。

(Q5)
サーバ側で、ソケットの接続待ち受けをするプログラムは
違うポート番号を割り当てれば、複数起動できる。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-02 12:55
引用:

半人前さんの書き込み (2004-07-02 09:22) より:

手元にあるサーバープログラムでは

@ソケットの生成、バインド、リッスンのお約束をした後
 ※一つのポートに対してのみ生成している
A複数のファイルディスクリプタの反応(接続要求があるかどうか)をチェック
Bあればデータ読み取りへ、アクセプトへ

というロジックになっているのですが、本スレッドで自分が投げさせてもらった
質問に対してuguuxpさんやJittaさんに頂いたアドバイスを元に考えれば、@と
Aは明らかに矛盾していると思うのです。


Solarisでの経験では、サーバ側ではクライアントからの通信を着信すると、そのクライアントとの通信専用にポートを複製し、新しいポート番号に続きのデータがはいるようにしてから、ライブラリを復帰します。
このため、復帰後にforkしたりマルチスレッドにしたりすると、複数の着信を同時に(実際にはタイムシェアード)処理することが可能となります。
fork等しなければ、処理されない間、データはポートの待ち行列にはいります。

1ど整理して、図をかいてみることをお推めします。TCP/IP等の書籍で、比較的図が多く描いてあるものをご覧になってはいかがでしょうか。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-02 14:33
Qooさん、レスありがとうございます。

これらの質問はどう理解しているか?という意味での質問ですね?
正直整理がつかなくなっています。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-02 16:45
半人前です。
間違っていれば指摘お願いします。

引用:

(Q1)
サーバ側で、ソケットの接続待ち受けで開かれるポート番号は
複数のクライアントから同時に接続可能である。



×

引用:

(Q2)
サーバ側で、ソケットの接続待ち受けで開かれるポート番号は
1つのクライアントが接続している間は、他のクライアント
からは接続できない。





引用:

(Q3)
サーバ側で、ソケットの接続待ち受けをするプログラムは
同じポート番号を割り当てる仕組みになっていれば
一つしか起動できない。





引用:

(Q4)
サーバ側で、ソケットの接続待ち受けをするプログラムは
違うポート番号を割り当てても一つしか起動できない。



×

引用:

(Q5)
サーバ側で、ソケットの接続待ち受けをするプログラムは
違うポート番号を割り当てれば、複数起動できる。





この質問は助かります。自分がどこを理解していないか把握できるような・・
正解よろしくお願いします。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-02 16:57
Jittaさん、レスありがとうございます。

引用:

TCP/IP等の書籍で、比較的図が多く描いてあるものをご覧になってはいかがでしょうか。



自分としては、こんな例を整理してくれて、かつ、マンガ絵みたいなので示している
書籍を探してます(^^;

@ひとつのクライアントが複数のスレッドを起動させてサーバのひとつのポートに対
 して通信を行おうとしている状態
Aひとつのクライアントが複数のスレッドを起動させてスレッド毎にサーバの複数の
 ポートに対して通信を行おうとしている状態
B複数のクライアントでサーバのひとつのポートに対して通信を行おうとしている状
 態
C複数のクライアントがサーバのそれぞれ異なるポートに対して通信を行おうとして
 いる状態

書いていて気が狂いそうになってきました。。。(((^^;

スキルアップ/キャリアアップ(JOB@IT)