1

私は何日もオンラインで検索してきましたが、VB6Winsockでこれと同じ問題を抱えている人を見つけることができません。これが私の問題です。アレイに2つのwinsockを備えたサーバーがあります。次に、それぞれ1つのwinsockコントロールを持つ2つのクライアントがあります。これで、サーバーが最初にクライアントAにデータを送信するように設定しました。次に、クライアントAがそのデータを受信し、独自のデータをサーバーに送り返します。次に、サーバーはクライアントBにデータを送信します。クライアントBがデータを受信すると、サーバーは自身のデータをサーバーに送り返します。つまり、データはクライアントからサーバーに送信され、次にサーバーから別のクライアントに送信され、次にサーバーに戻され、次に別のクライアントに送信されます。本当にやりたいようにやってみたら問題があったので、こうしました。そのため、一度に1つのクライアントのみがサーバーにデータを送信するようにするには、このように設定する必要がありました。このプロセスは完全に機能しますが、イメージできるようにクライアントが多いほど、各クライアントとサーバー間のデータ転送の遅延が長くなるため、別の方法で機能させたいと思います。

ですから、私が本当にやりたいことは、仕事に就けないことですが、クライアントが必要なときにいつでもサーバーとデータを送受信できるようにすることです。つまり、クライアントAがサーバーにデータを送信してから、サーバーがデータを送り返します。その間、クライアントBは同じことを行います。これを行うと、サーバー上にwinsockアレイがありますが、問題が発生します。クライアントAが最初に接続すると、サーバーとのデータの送受信を開始します。ただし、クライアントBがサーバーに接続すると、クライアントAとサーバー間のすべての通信が停止し、クライアントBのみがサーバーとデータを送受信します。これでいくつかのテストを実行しましたが、クライアントAは常にサーバーに接続されたままです。しかし、何らかの理由で、2つのクライアントが同時にサーバーにデータを送信すると、各winsockが異なるポートにある場合でも、1つのデータ到着イベントのみが発生するようです。

ですから、誰かがこれを読んで、私が理解していないのは何か、私が間違っているのは何なのかを説明してくれることを本当に望んでいます。

4

2 に答える 2

2

Winsockコントロールに関するMicrosoftKBの記事を検索すると、欠陥とバグ修正の長い歴史が見つかります。膨大な数の問題が時間の経過とともに解決されたため、VB6を使用する前にSP6インストールしない理由はまったくありません。

あなたがそれをした後(そしてその時だけ)、あなたが説明する種類の問題について話すことは本当に価値があります。少なくとも、既知の問題のかなりの数を排除するので、コードについて説明する価値があるかもしれません。

于 2013-02-10T17:04:22.543 に答える
-3

ブロッキングソケットを使用していませんか?私はあなたがすべきだと思います。おそらく、着信接続ごとにスレッドを作成する必要があります。したがって、メインループはブロッキングなしで動作し、着信接続ごとにスレッドを作成する必要があります。このスレッドは、データを受信して​​応答を送信します。

于 2013-02-10T17:03:30.240 に答える