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アドレスが残ってる状態ですが。。
どなたかご教授願います。
書き忘れました。
VB6、Win2000です。
2 回目というのは、実行を終了せずに、再度コマンドを押したらという意味です。
実行を終了してから、また実行した時も最初だけはうまくいきます。
とりあえず、2回目が始まったときにCloseメソッドを入れてみる…とか。
…んー、後は何だろう…
同じインスタンスのWinsockコントロールでポートを閉じずに再度Connect
するとエラーになるでしょう。
ガッさんの言う通り先ずCloseを先にして下さい。
あと、接続に行くときはWinsock1.LocalPort=0としてWinsockコントロール
に自動的にポートを決めさせたほうがいいよ
あとConnect直後に
>Winsock1.SendData Text1.Text '送信
はまずいでしょう。
Connectedイベントを待ってから送信しましょう。
というかMSDNのサンプルをとりあえず見たら?
ちょっと違うかもしれませんが。
サーバ側
・WindowsNT4.0のSP5以前/95/98 + VB6SP5のWinsockで作ったサーバ
・クライアント側
ある組み込みOSのアプリケーション。ローカルのポート番号が毎回同じ
という構成で接続/切断を繰り返すと2回目の接続をWindowsがOSレベルで
拒否してしまう現象を経験したことがあります。
初めまして。Mです。
私も同様の件で困っております。
Address already in use
といって怒られます。
当然、1回目の切断時に、WinSock1.close で閉じているので、
2回目がなぜうまく接続できないのかが分かりません。
ネットで検索していると、下記のようにありますが,具体的には
どのようにコーディングしたら良いのかがいまいち分かりません。
|アドレスは既に使用中である。
|bind()しようとしたアドレスは、既にほかのソケットで使われている。
|同じローカルアドレスを複数のソケットで使うためには、SO_REUSEADDR
|ソケットオプションをTRUEにする必要がある。
close しただけではだめなのでしょうか?
私の分は、自己解決です。
WinSock1.close
した後に,ローカルポートに 0 を入れたら
再接続できるようになりました。
WinSock1.localport = 0
これで、いいのだろうか…?(^^;
KKR さんも同様な策で解決できる良いのですが…
みなさん丁寧なご回答ありがとうございました。
私もMさんと同様、Winsock1.LocalPort=0で通りました。
あとConnect直後にSendDataはまずいのですね・・
ド初心者なので、勉強なりました。