今回、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度接続確立して、クライアント側を閉じてしまうと、
サーバー側をもう一度起動しなければ接続できなくなってしまいます・・・。
エラーには「接続が受付られませんでした」と記入されています。
どうかお力をお貸しください。
それは当然です・・・
TCP/IPでのネットワーク上のパケットの流れをいいますと、
サーバーでもクライアントでも、セッションをクローズした
ら、『FIN』パケットが投げられ、相手側もこれを受けてク
ローズ処理を行います。よって、Listen側のサーバーは、絶
えず相手側からの不慮の切断を予期し、再接続してきたら、
それを受け付けられるように、即座にClose=>Listen状態に
ならなければなりません。
※細かい処理は全て省いた説明です。
セッションクローズの際には、ShutDownするのですが、
その辺の手順は、間違いなく行って下さい。
ご検討下さい。
以上。
ありがとうございます。
どうやら、「 If lngOptionValue Then」を付け忘れていたようです。
お手数かけてすいませんでした。
ツイート | ![]() |