Article View: fj.lang.visualbasic
Article #468Re: winsockプログラミングの質問。
From: 市崎 大介
Date: Sun, 01 Mar 1998 00:00
Date: Sun, 01 Mar 1998 00:00
91 lines
4101 bytes
4101 bytes
Syuji Okumura wrote in message <6c9pes$c2r@isv02.ilinx.co.jp>...
>質問
>TCPでのsoket通信について
Microsoft Winsock ControlとVBでの実装と考えてよろしいでしょうか?
以下、その環境を想定しての回答です。
>わからないこと①
>serverのlocalポートをcloseしてからclientのlocalポートをcloseし、
>connectすると直ぐに接続できるが、
>clientのlocalポートをcloseし、serverを要求受け入れ状態にして
>connectすると必ず接続失敗するのは何故か?
>
>わかったこと
>clientのlocalポートを別のポートにすると直ぐに接続が可能になった。
>しかし、
>実行エラー'10048" アドレスが使用されています。
>と表示される時がある。
>
>しりたいこと
>以下client側のlocalポートです。
>・使用できるlocalポートの検索方法
>・使用できないlocalポートを使用可能にする方法
Server側のWinsock Controlは配列になっていますか?
基本的にはServer側のWinsock Control配列の(0)をListenしておき、
ConnectionRequestイベントで新たなWinsock Controlを配列に追加し、
追加されたWinsock ControlのAcceptメソッドを用いて接続を開始しま
す。これが、サーバ側の実装方法です。
ServerのCloseイベントで、Close要求を受けたWinsock Controlのイン
スタンスをUnloadしてやれば、確実にセッションは切断されるはずです
ね。この後、同じクライアントからConnect要求を発行しても、実際に
Acceptするのは上記のように、まったく別のインスタンスとなるので、
ポートやアドレスの重複は起こらないはずです。
というわけで、この問題については、
「しりたいこと」
で列挙されている項目は、問題の解決にはつながらないと思います。
ちなみに、TCPの場合、Client側のLocal Portは基本的に利用しませ
ん。Client側で設定するのはRemotePortだけで、逆にServer側では
LocalPortだけを設定しておけば、Portに関しては問題ないはずです。
>わからないこと②
>現象
>serverのDataArrivalで、A(仮)ポートからGetDataして、AポートにSendDataした
後、
>B(仮)ポートにSendDataすると、client側にBポートのデータは送られたがAポートの
デー
>タが送られなかった。
>次のDataArrivalでAポートにSendDataしたら前回のデータといっしょに送られた。
>
>しりたいこと
>SendDataで、バッファに溜ったまま送られなかった理由
コード中で連続的にSendDataメソッドを利用してデータを送信する場合、
つまり、複数のPortやWinsock Controlのインスタンスに一括してデータ
を送信する場合、各SendDataメソッドの間にDoEventsステートメントを実行
する必要があります。これはWinsock Controlの仕様です。
例;
sckWinsock(0), sckWinsock(1),sckWinsock(2)は、それぞれWinsockの
インスタンス。
以下NG
Dim intCount As Integer
For intCount = 0 To 2
sckWinsock(intCount).SendData "Hello!!"
Next
以下OK
Dim intCount As Integer
For intCount = 0 To 2
DoEvents
sckWinsock(intCount).SendData "Hello!!"
Next
以上が回答です。
ちなみに、今回の回答の内容はすべてVB 5.0に付属のオンラインド
キュメント(Help, BooksOnline)に記述されています。
市崎 大介
Technical Details
Message-ID:
<6da3t9$a29$1@nn-tk003.ocn.ad.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6c9pes$c2r@isv02.ilinx.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 105c2e,627160140d670efa X-Google-Attributes: gid105c2e,public From: "市崎 大介" <ichizaki@triad.ne.jp> Subject: Re: winsockプログラミングの質問。 Date: 1998/03/01 Message-ID: <6da3t9$a29$1@nn-tk003.ocn.ad.jp> X-Deja-AN: 329552939 Content-Transfer-Encoding: 7bit References: <6c9pes$c2r@isv02.ilinx.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3 Organization: NTT Open Computer Network Newsgroups: fj.lang.visualbasic