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

解決


KKR  2005-04-08 03:50:52  No: 120752

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-08 03:54:15  No: 120753

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


ガッ  2005-04-08 03:57:21  No: 120754

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


おたまむし  2005-04-08 08:32:57  No: 120755

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

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


おたまむし  2005-04-08 08:34:37  No: 120756

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

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


ひろ  2005-04-08 17:25:23  No: 120757

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

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

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

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


  2005-04-09 04:00:20  No: 120758

初めまして。Mです。

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

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

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

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

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


  2005-04-09 04:34:38  No: 120759

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

 WinSock1.close

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

 WinSock1.localport = 0

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

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


KKR  2005-04-11 08:02:35  No: 120760

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

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


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

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






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