問題タブ [windows-socket-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sockets - 10057ソケット経由でSendBufを実行するとWSA例外が発生する
クライアント:
サーバ:
奇妙なことに、クライアントからログイン+pwを2回送信する必要があります。
初めて送信(クライアント)すると、サーバーでonClientConnectとonAcceptを取得します。2回目に(クライアント)を送信すると、サーバーは、マークした行までコードを実行します。10057WSA例外が発生します。
なぜこのエラーが発生するのですか?ただし、奇妙なことに、「ソケットが開いていません」という例外が発生する行の直前でサーバーのソケットを開くと、とにかく取得します。
windows - プロセスで WSAStartup が呼び出されたかどうかを確認することはできますか?
ソケットを利用する ActiveX コントロールの作成を開始しました。
このコントロールを使用するアプリケーションは、ソケットも使用する場合と使用しない場合があります。WSAStartup が呼び出されたかどうかをコントロールで判断することはできますか?
そうでない場合は、電話してください。ちょっとしたテストで、WSAStartup の複数回の呼び出しが許容されることがわかりました。しかし、別のバージョンの winsock が要求された場合はどうなるでしょうか? これにより、アプリケーションの他の部分が壊れますか?
c++ - 複数のスレッドから WSAStartup() を呼び出すと、デッドロックが発生する可能性がありますか?
1 つの TCP サーバーと複数の UDP サーバー/リスナーを持つアプリを開発しています。各サーバーは個別のスレッドであり、確立された TCP 接続のワーカー スレッドと同じです。各スレッドで WSAStartup() を呼び出しています。
時々、WSAStartup() の呼び出しがハングします (デッドロックのように見えます)。スタック トレースは次のとおりです。
このデッドロックは、初期化フェイズ中に発生します。TCP サーバーが開始され、TCP 接続が 1 つ確立されていることがわかりますが、UDP サーバーは 1 つしか開始されていません。スタック トレースは、残りの UDP サーバーを開始する関数からのものです。私の推測では、UDP サーバーを初期化して WSACStartup() を呼び出している間に、別のトレッドが別のソケット操作 (新しい TCP 接続など) を処理しており、WSAStartup() も呼び出しているのではないでしょうか?
私の質問は、複数のスレッドから WSAStartup() を呼び出すと、このデッドロックが発生する可能性があるかどうかです。また、デッドロックの前に呼び出された WSACleanup() を確認しましたが、そうではありません。実行は WSACleanup() のいずれにも到達しません。
WSAStartup を 1 回呼び出すだけで十分であることは承知していますが、WSAStartup() を数回呼び出すことは問題にならないはずです (MSDN] 1 ):「アプリケーションは、WSADATA 構造情報を取得する必要がある場合、WSAStartup を複数回呼び出すことができます。一回以上。" したがって、このデッドロックが WSAStartup() によって引き起こされているのか、それとも他の何かによって引き起こされているのかを確認したいと思います。
c++ - コードでこの「10038 wsa socket」エラーが発生する
現在、TCP 接続を作成して使用するクラスを実装しようとしています。
(私はC ++を初めて使用するので、コードを真剣にチェックしていても、明らかなことを忘れている可能性があります)
後で新しい接続を処理するために 2 番目のクラスを実装する予定なので、コードの一部が不完全または配置されていることに注意してください。理解しようとしている間、これが妨げにならないことを願っています。
これが私の問題です:
サーバーとクライアントの両方が正常に動作しているようです (私は常にリッスン、バインド、接続機能をチェックしています: エラーはありません)、クライアントでデータを送信できるようですが、サーバーからデータを読み取ろうとすると、WSA エラー 10038 が発生します (これは、無効なソケットで recv() を実行していることを意味します)。私は数日間それを調べてきましたが、私の間違いを見つけることができないようです. コードのテストに加えて、「netstat -an -p tcp」を使用して接続の状態を確認しましたが、すべて問題ないように見えますが、サーバーはデータを受信しません。
注: 私は Visual Studio 6 (うん、古いですが、必須なので...) と winsock2 ではなく winsock を使用しています。
何かを忘れた場合は、できるだけ完全であるように努めていますが、何かを忘れることは不可能ではありません。
これが私のソースコードです。私はそれを本質的にカットしようとしましたが、間違いはほとんどどこにでもあるのではないかと心配しています:
CmTcpTransport.cpp
サーバー main.cpp
クライアント main.cpp
両方のメインを実行したときのコンソールのスクリーンショットは次のとおりです。
http://www.hostingpics.net/viewer.php?id=892752Consoles.jpg
ご協力いただきありがとうございます。これを読む/処理するのは大変だと思います。その努力に感謝します !
c++ - サーバーソケットのバインド時の WSA エラー 10048
クライアント アプリケーションとサーバー アプリケーションでソケットを使用する方法を学ぶために、msdn Web サイトの簡単なサーバーチュートリアルから始めました。
t チュートリアルを完了したら、クライアントとサーバーのコードをマルチスレッド プログラムに適合させて、tchat のクライアントとサーバーを作成しました。WSA エラー 10048 が発生するまで、すべてが順調に進んでいました。ソケットごとに異なるポートを使用してみましたが、それでもエラーは解決しませんでした。
ここに私のサーバーコードがあります:
異なる cout に気付くかもしれませんが、それらはプログラムがどのように動作するかを知るための単なる cout です。
winapi - x86 WinAPI - 一部の関数引数がプログラムでどのように参照されているかわかりません
私は WINAPI ライブラリ (具体的には WSA - ソケット) を使用する ac プログラムを作成し、ソース コードをコンパイルする代わりに、アセンブリ ソースを発行するようにコンパイラに要求し、それが下位レベルでどのように機能するかを調べました。
以下の行に出くわしたとき、アセンブリに、WINAPI 関数の最初の引数への参照がないことに気付きました。WSAStartup の MAKEWORD 関数です。
ここで実際に何が起こっているのでしょうか? 私のアセンブリ コードには MAKEWORD への参照はありませんが、プッシュ 514 のヒントがあります。
注: WSAStartup 関数は、プロセスによる Winsock DLL の使用を開始します。
必要に応じてさらに情報を提供できます