- PR -

TcpClientのCloseについて

1
投稿者投稿内容
T3HKYM
会議室デビュー日: 2004/01/29
投稿数: 15
投稿日時: 2004-12-09 17:21
お世話になります。
現在、WindowsXPとVB.NETにてTcpClientを作成しています。
TcpServerとしてVB6.0で作成したアプリと通信確認を行おうとしているのですが、
1度TcpClientで接続した後,切断し,再度接続しようとするとエラーとなってしまします。
調べてみると,Client側での切断処理で,VB6.0のServer側にCloseイベントが発生していません。
原因としてはどのようなことが考えるのでしょうか。

参考までに、コードの抜粋を送付いたします。
1) Serverを初期化(VB6.0のアプリ)
2) Clientから接続要求を発行
mTcpClient = New System.Net.Sockets.TcpClient(mServerHost, mServerPort)
mNetStm = mTcpClient.GetStream()
3) Clientにて切断
Call mTcpClient.Close()

以上、よろしくお願いいたします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-12-09 18:03
サーバー側で、ソケットが閉じられていないのでしょう。

クライアント側で、接続を切断するときに、
サーバー側にそのことを伝え、ソケットを閉じるようにする必要があります。
引用:

Client側での切断処理で,VB6.0のServer側にCloseイベントが発生していません。


このためには、「ソケットの片側が閉じられたら、もう片方で、イベントが発生する」という保証が必要です。
ドキュメントのどこかに、そのような記述がありましたか?
T3HKYM
会議室デビュー日: 2004/01/29
投稿数: 15
投稿日時: 2004-12-09 18:31
Edossonさん
返答ありがとうございました。
 まずイベントの件ですが、これはServer側(VB6.0)におけるWinsockのCloseイベントの事です。
 [リモートコンピュータが接続を閉じたときに発生します。・・・]と記述されていたので、イベントが発生すると解釈したのですが?
 それと、私の質問の件ですが、いろいろとテストを行っていてわかったのですが、切断を閉じる際に、
 Call mNetStm.Close()とすると,Server側にCloseイベントが発生しました。
 この為、現在は
 Call mNetStm.Close()
 Call mTcpClient.Close()
 と記述しています。
 これで今のところうまく動作はしていますが、TcpClientのCloseで全てをCloseしてくれないので、なんとなく釈然とはしません。

以上、
1

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