ソケットの複数制御するには?

解決


toto  2007-07-13 20:57:37  No: 136950

お世話になります。
VB 6.0でソケット制御プログラム(サーバー)を作成しています。
複数のクライアントと接続するように組んでいるのですが、
同時に接続にくると正常に接続できません。
Functionプロシージャでメッセージを取得して、接続、データ通信、切断の処理を
しています。
プロシージャで処理している最中に接続しにくると、
別スレッドのように同時に処理してしまうのでしょうか?
排他制御しないといけないのでしょうか?

環境は、WindowsXP SP2です。
参考になるURL、アドバイスを宜しくお願いします。


我龍院  2007-07-18 17:40:15  No: 136951

>VB 6.0でソケット制御プログラム(サーバー)を作成しています。
WinSockで通信プログラムのサーバー側のプログラムを作成していると言うことでしょうか?

一応WinSockでTcp通信と仮定すると、
>複数のクライアントと接続するように組んでいるのですが、
クライアント毎にWinSockを作成していますか?

一応WinSockを配列にして、クライアント毎新しい接続を確立していると仮定して、
>プロシージャで処理している最中に接続しにくると、
このプロシージャというのはConnectionRequestですかそれともDataArrivalですか?

一応DataArrivalと仮定して、
>別スレッドのように同時に処理してしまうのでしょうか?
DataArrivalの中でDoEventsを使用しない限り、DataArrivalを処理中に
新しいDataArrivalイベントが起こることはありません。
もしDoEvantsが入っていると、処理中に他のDataArrivalイベントが起こる可能性がありますが、
別スレッドでは有りません。

>排他制御しないといけないのでしょうか?
排他制御にしてしまうと、複数クライアントのサーバーではなくなります。


toto  2007-07-20 00:59:54  No: 136952

我龍院さん、ご回答ありがとうございます。
当初、フックしてメッセージを取得して、APIで組み込もうとしてましたが、
上位のアプリケーションとの通信時、どうしても待機する必要があり、
その間他のメッセージ処理ができず、困っていました。
DoEventsを使用するとメッセージを取りこぼしてしまうので、
WinSockを使用することにします。

ありがとうございました。


toto  2007-07-20 01:00:49  No: 136953

すいません。
解決チェックボックスにチェックするの忘れてしまいました。


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

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






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