WinSockを使ったサーバとクライアントの通信でうまく接続できません。

解決


KKR  2005-04-07 18:50:52  No: 120752  IP: [192.*.*.*]

WinSockを使ったサーバとクライアントの通信でうまく接続できません。
クライアント側のコードです。

Private Sub Command1_Click()
    Winsock1.RemoteHost = 190.7.57.40  'IPアドレス
    Winsock1.RemotePort = 10009        'ポート番号
    Winsock1.Connect                   '接続
    Winsock1.SendData Text1.Text       '送信
End Sub

実行すると1回目はちゃんと接続できるのですが、2回目以降はRemoteHostが通らずエラーになります。
ウォッチ式で確認すると、2回目からIPアドレスが残ってる状態ですが。。
どなたかご教授願います。

編集 削除
KKR  2005-04-07 18:54:15  No: 120753  IP: [192.*.*.*]

書き忘れました。
VB6、Win2000です。
2 回目というのは、実行を終了せずに、再度コマンドを押したらという意味です。
実行を終了してから、また実行した時も最初だけはうまくいきます。

編集 削除
ガッ  2005-04-07 18:57:21  No: 120754  IP: [192.*.*.*]

とりあえず、2回目が始まったときにCloseメソッドを入れてみる…とか。
…んー、後は何だろう…

編集 削除
おたまむし  2005-04-07 23:32:57  No: 120755  IP: [192.*.*.*]

同じインスタンスのWinsockコントロールでポートを閉じずに再度Connect
するとエラーになるでしょう。
ガッさんの言う通り先ずCloseを先にして下さい。

あと、接続に行くときはWinsock1.LocalPort=0としてWinsockコントロール
に自動的にポートを決めさせたほうがいいよ

編集 削除
おたまむし  2005-04-07 23:34:37  No: 120756  IP: [192.*.*.*]

あとConnect直後に
>Winsock1.SendData Text1.Text       '送信
はまずいでしょう。
Connectedイベントを待ってから送信しましょう。

というかMSDNのサンプルをとりあえず見たら?

編集 削除
ひろ  2005-04-08 08:25:23  No: 120757  IP: [192.*.*.*]

ちょっと違うかもしれませんが。

サーバ側
・WindowsNT4.0のSP5以前/95/98 + VB6SP5のWinsockで作ったサーバ

・クライアント側
  ある組み込みOSのアプリケーション。ローカルのポート番号が毎回同じ

という構成で接続/切断を繰り返すと2回目の接続をWindowsがOSレベルで
拒否してしまう現象を経験したことがあります。

編集 削除
 2005-04-08 19:00:20  No: 120758  IP: [192.*.*.*]

初めまして。Mです。

私も同様の件で困っております。
Address already in use
といって怒られます。

当然、1回目の切断時に、WinSock1.close で閉じているので、
2回目がなぜうまく接続できないのかが分かりません。

ネットで検索していると、下記のようにありますが,具体的には
どのようにコーディングしたら良いのかがいまいち分かりません。

|アドレスは既に使用中である。
|bind()しようとしたアドレスは、既にほかのソケットで使われている。
|同じローカルアドレスを複数のソケットで使うためには、SO_REUSEADDR
|ソケットオプションをTRUEにする必要がある。

close しただけではだめなのでしょうか?

編集 削除
 2005-04-08 19:34:38  No: 120759  IP: [192.*.*.*]

私の分は、自己解決です。

 WinSock1.close

した後に,ローカルポートに 0 を入れたら
再接続できるようになりました。

 WinSock1.localport = 0

これで、いいのだろうか…?(^^;

KKR さんも同様な策で解決できる良いのですが…

編集 削除
KKR  2005-04-10 23:02:35  No: 120760  IP: [192.*.*.*]

みなさん丁寧なご回答ありがとうございました。

私もMさんと同様、Winsock1.LocalPort=0で通りました。
あとConnect直後にSendDataはまずいのですね・・
ド初心者なので、勉強なりました。

編集 削除