Winsockでサーバーを作成

解決


スチールウール  2004-08-04 08:53:34  No: 115332  IP: [192.*.*.*]

Winsockコントロールを使用してサーバー/クライアント型のチャットソフトを作成しています。
質問なのですが、クライアントの数だけポートが必要なのでしょうか?

編集    削除
GOD  2004-08-04 22:17:41  No: 115333  IP: [192.*.*.*]

何の為のポート?
接続用は1つで通信用はクライアント分になるのでは?

編集    削除
スチールウール  2004-08-05 00:01:28  No: 115334  IP: [192.*.*.*]

GODさん、ご返答ありがとうございます。
通信用のポートです。クライアント分ポートが必要になるなら、たとえば接続用のポートが12345だったとしたら通信用のポートは12346,12347という風に割り当てられていくのでしょうか?

編集    削除
GOD  2004-08-05 00:33:55  No: 115335  IP: [192.*.*.*]

考え方は大体それでいいと思いますが、12346とするかは微妙です。
プログラム中で空きポート番号の一覧を管理するならできそうですが、大概は
面倒なのでLocalPortに0を入れて空いている適当なポートを勝手に割り当てさ
せます。
一例としてサンプル(VB6)を(考えかただけ読んでください。)

Private Sub Wsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    'Wsock - WinSockコントロール
    'Index = 0  受け付け用(特定ポートを開いて待ち受ける)
    'Index = 1 〜 n  通信用
    Dim NewIndex As Integer

    '待ち受け用以外でリクエストが来ても無視する。
    If Index <> 0 Then Exit Sub
    NewIndex = Wsock.UBound + 1
    '通信で使用するためのWinSockコントロールをロードする
    Load Wsock(NewIndex)
    '空きポートを適当に割り当てる
    Wsock(NewIndex).LocalPort = 0
    'ロードしたコントロールでaccept処理
    Wsock(NewIndex).Accept requestID
End Sub

編集    削除
スチールウール  2004-08-05 06:36:23  No: 115336  IP: [192.*.*.*]

そうだったんですか!
今まではなんとなく動いているという感じでLocalPort = 0の意味がよくわかっていませんでした。
がんばって作ってみます。ありがとうございました。

編集    削除