問題タブ [winsockets]

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.

0 投票する
1 に答える
112 参照

windows - まだ満たされていないリソースから同期的に読み取るスレッドの CPU 使用率が高い

(win32/c++環境での作業)

リソース(の)ReadFileから読み取る1バイトの固定サイズで(同期的に)呼び出す関数があります。この関数を実行する複数のスレッドがあります。データは外部からソケットに書き込まれ、私の制御下にはありません。データがまだ書き込まれていないときはいつでも、CPU のほぼ 80% を消費していることに気付き、使用量は前述のスレッド間で比較的均等に分割されます (通常は 4 つのスレッドがあります)。SOCKETWINSOCKexe

OS api と同様ReadFileに、このような問題を回避するために、内部で非同期に実装されることを期待していました。私の質問は、なぜこれが起こっているのか、それを避けるために何ができるのかということです.

0 投票する
1 に答える
242 参照

c++ - C++ クライアントがサーバー/Winsock への送信に失敗する

私は、ジョイパッド (押されたボタン) のコードをサーバーに送信する、高度なクライアント サーバー プログラムに取り組んでいます。複数のジョイパッド コードを送信するため、C++ コードの 1 つのパッセージで、クライアント コード セグメントを繰り返さなければなりません。

送信するものがあるたびに関数を呼び出すことを考えました。

クライアント機能:

お気づきのように、クライアント コード セグメントには send 関数が含まれていません。これは、私が言ったように、常に同じ char 変数を送信するとは限らないためです。押されたボタンによって、送信する文字が異なります。例えば:

コード セグメント (△ および O ボタンの送信):

ただし、send 関数は SOCKET_ERROR で失敗します。なぜそれが起こるのですか?どんな助けでも大歓迎です。

0 投票する
2 に答える
416 参照

windows - IOCP、AcceptEx、オーバーラップ、および WSAEINVAL

IOCP、ソケット、オーバーラップを使用するサーバーがあります。最初はすべてが素晴らしいです。リッスンしているソケットは、IOCP で AcceptEx を使用して、新しく作成されたソケットにハンドオフします。何千もの接続を問題なく処理できます。

サーバー プロセスの処理が遅れると、リッスン ポートを閉じて切断します。追いつくと、新しい IOCP でリッスン ポートを再確立します。

私が遭遇した問題は、リスニング ポートを再確立した後、新しい接続が到着した後、上記とまったく同じコード パスを使用して受け入れようとすることです。AcceptEx は WSAEINVAL で失敗します。

いくつかの詳細を省略していることは承知しています (そして、悪魔は常に詳細に潜んでいますよね?)。

好奇心旺盛な方がさらに詳しい情報をお知りになりたい場合は、喜んで提供させていただきます。

0 投票する
2 に答える
116 参照

c++ - 私のメッセージが余分な文字で受信される理由は何ですか?

学校のプロジェクトで winsock を使用して、情報 (文字セット) を別のプログラム (クライアント/サーバー) に送信するプログラムを作成しようとしています。

私が送信したメッセージは反対側で受信されますが、末尾に余分な文字が含まれています. IE 「ハロー」を送信したい場合、「hallod3」またはいくつかのランダムなシンボルを受け取ります。

PS: メッセージはクライアントからサーバーに送信されます

サーバー上の私のコードは次のとおりです。

クライアントは次のとおりです。

DEFAULT_BUFLEN が定義されています (メッセージの長さ)。ShowMessage() は、文字列を取得して表示する VCL コンポーネント (私は Borland C++ Builder を使用しています) の関数です。

PS: クライアントで文字列 'sendbuf' を確認しましたが、余分な文字はありません。文字列の末尾に '\0' を追加することさえあります。

ここで何が問題なのですか?

0 投票する
1 に答える
2129 参照

c++ - Windows TCP ソケット タイムアウト C++

質問があります

指定された時間内にクライアントがサーバーに応答しなかったかどうかを知る方法は?!

選択機能ではなくスレッドを使用しています。

あなたの助けは大歓迎です:)

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

0 投票する
0 に答える
845 参照

c - DTLS接続を受け入れるためのUDPソケットの再起動が機能しない

UDP サーバーを起動し、DTLS 接続を受け入れて着信データを読み取ります。コードは正常に動作しています。しかし、クライアントソケットを再起動してクライアントからの接続を再利用すると、サーバーは何も読み取ることができません。SSL インスタンスの作成には Cyassl ライブラリを使用します。

クライアント: 以前に使用した DTLS コンテキストを再利用しているため、ソケット バインディングと DTLS の初期化は問題ありません。

サーバー: また、ソケットのクローズと開始はすべて問題ありませんが、受け入れられた FD で受信できません。

しかし、UDP サーバーを閉じてから起動するまでの間にちょうど 5 秒のスリープを入れれば、すべて問題ありません。しかし、スリープのようなブロッキング I/O は使いたくありません。

助けてください。サーバ:

m_udp_fd で受信したデータを受け入れる:

TCP接続が切断されているかどうかに応じて、接続が切断されている場所。これは完全にヒットしています:

UDP 読み取り接続機能:

Open DTLS サーバー メソッド: ここで dtls_ctx と dtls_meth はグローバル変数です。

m_ssl_accept 関数: ssl_m もグローバル変数です。

0 投票する
1 に答える
624 参照

c - win32 UDP ソケット アプリケーションで UDP サーバーからデータを受信できない

UDP サーバーとしてハードウェア ARM コントロールがあり、C# で記述された以下のコードを介して通信しています。PC は UDP クライアントです。サーバーは単にデータをエコーし​​ます。

これは問題なく正常に動作し、安定しています。

ここで、Win32 C アプリケーションで同じ PC コードが必要です。以下のコードを試しました。

このコードは UDP サーバーに送信でき、エコー バックします。しかし、recvfrom 呼び出しは無限の時間までデータを待機します。recvfrom が呼び出しをブロックしています。正しい IP アドレスと PORT を指定しています。それでも、Win32 アプリでサーバーからデータを受信できません。手伝ってくれますか?