お世話になります。
VB 6.0でソケット制御プログラム(サーバー)を作成しています。
複数のクライアントと接続するように組んでいるのですが、
同時に接続にくると正常に接続できません。
Functionプロシージャでメッセージを取得して、接続、データ通信、切断の処理を
しています。
プロシージャで処理している最中に接続しにくると、
別スレッドのように同時に処理してしまうのでしょうか?
排他制御しないといけないのでしょうか?
環境は、WindowsXP SP2です。
参考になるURL、アドバイスを宜しくお願いします。
>VB 6.0でソケット制御プログラム(サーバー)を作成しています。
WinSockで通信プログラムのサーバー側のプログラムを作成していると言うことでしょうか?
一応WinSockでTcp通信と仮定すると、
>複数のクライアントと接続するように組んでいるのですが、
クライアント毎にWinSockを作成していますか?
一応WinSockを配列にして、クライアント毎新しい接続を確立していると仮定して、
>プロシージャで処理している最中に接続しにくると、
このプロシージャというのはConnectionRequestですかそれともDataArrivalですか?
一応DataArrivalと仮定して、
>別スレッドのように同時に処理してしまうのでしょうか?
DataArrivalの中でDoEventsを使用しない限り、DataArrivalを処理中に
新しいDataArrivalイベントが起こることはありません。
もしDoEvantsが入っていると、処理中に他のDataArrivalイベントが起こる可能性がありますが、
別スレッドでは有りません。
>排他制御しないといけないのでしょうか?
排他制御にしてしまうと、複数クライアントのサーバーではなくなります。
我龍院さん、ご回答ありがとうございます。
当初、フックしてメッセージを取得して、APIで組み込もうとしてましたが、
上位のアプリケーションとの通信時、どうしても待機する必要があり、
その間他のメッセージ処理ができず、困っていました。
DoEventsを使用するとメッセージを取りこぼしてしまうので、
WinSockを使用することにします。
ありがとうございました。
すいません。
解決チェックボックスにチェックするの忘れてしまいました。
ツイート | ![]() |