受信待ち(TCP/IP)の設定について

解決


ペンタ  2003-12-16 07:08:14  No: 80921

今回、TCP/IPで接続確立するソフトを作成しています。

クライアントとサーバーの二つで構成されており、チャットプログラムです。

そこで、Winsockメソッドを使用し、クライアント側へ

------------------------------------------------------------------
Private Sub Command1_Click()
 With Winsock1
  If .State = sckClosed Then
     .RemoteHost = Text1.Text
     .RemotePort = Text2.Text
     .Connect
End If
End With
End Sub
---------------------------------------------------------------------

となっております。そして受信部なのですが、
---------------------------------------------------------------------

Private Sub Form_Load()

With Winsock1
    .LocalPort = 1001  'Port Nomber
    .Listen            'State
    
    End With
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    With Winsock1
     If .State <> sckClosed Then
     .Close
     
     End If
     .Accept requestID
     End With
     End Sub
---------------------------------------------------------------------
こうなっています。ちゃんと接続確立できました。
しかし。なぜか1度接続確立して、クライアント側を閉じてしまうと、
サーバー側をもう一度起動しなければ接続できなくなってしまいます・・・。

エラーには「接続が受付られませんでした」と記入されています。

どうかお力をお貸しください。


岡田 之仁  2003-12-16 09:05:14  No: 80922

それは当然です・・・

TCP/IPでのネットワーク上のパケットの流れをいいますと、
サーバーでもクライアントでも、セッションをクローズした
ら、『FIN』パケットが投げられ、相手側もこれを受けてク
ローズ処理を行います。よって、Listen側のサーバーは、絶
えず相手側からの不慮の切断を予期し、再接続してきたら、
それを受け付けられるように、即座にClose=>Listen状態に
ならなければなりません。

※細かい処理は全て省いた説明です。
  セッションクローズの際には、ShutDownするのですが、
  その辺の手順は、間違いなく行って下さい。

ご検討下さい。

以上。


ペンタ  2003-12-17 01:28:46  No: 80923

ありがとうございます。

どうやら、「 If lngOptionValue Then」を付け忘れていたようです。

お手数かけてすいませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加