問題タブ [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.
c# - Socket クラスでデータ受信イベントを使用するには?
dotnet で TcpClient を使用して通信する単純なクライアントを作成しました。サーバーからのデータメッセージを待つために、ソケットでRead()
ブロッキング呼び出しを使用するスレッドを使用します。Read()
何かを受け取ると、さまざまなイベントを生成する必要があります。これらのイベントはワーカー スレッドで発生するため、そこから直接 UI を更新することはできません。Invoke()
使用できますが、UI をまったく使用しないユーザーやプレゼンテーション フレームワークを使用するユーザーが SDK を使用するため、最終開発者にとっては困難です。プレゼンテーション フレームワークでは、これを処理する方法が異なります。Invoke()
現時点では、Microstation Addin としてのテスト アプリでは多くの時間がかかります。Microstation はシングル スレッド アプリケーションであり、そのスレッドでの call invoke は、常に描画を行うのに忙しく、他のメッセージの処理に時間がかかりすぎるため、適切ではありません。
Dispatcher
ユーザーがまたはを通過する必要がないように、UI と同じスレッドでイベントを生成したいInvoke
。
データが到着したときにソケットから通知を受ける方法を知りたいですか? そのためのコールバックが組み込まれていますか。別の読み取りスレッドを使用せずに winsock スタイルの受信イベントが好きです。また、データのポーリングにウィンドウタイマーを使用したくありません。
ヘルプが言う関数にIOControlCode.AsyncIO
フラグが見つかりましたIOControl()
データの受信待ちの通知を有効にします。この値は、Winsock 2
FIOASYNC
定数と同じです。
それを使用して通知を受け取る方法の例は見つかりませんでした。私が MFC/Winsock にいる場合size(0,0)
は、データ受信イベントまたは他のソケット イベントをリッスンするために使用されたウィンドウを作成する必要があります。しかし、ドットネット アプリケーションでそれを行う方法がわかりません。
c - NULバイトが受信されるまでrecv()?
サーバーから一度に 1 つのパケットを受信しようとしています。パケットの速度が速すぎて、それぞれのサイズが定義されていないため、読み取るバイト数を指定して recv() を呼び出すと、最初のパケットが読み取られ、おそらく2番目のパケット。各パケットは NULL 終端されているため、NULL バイトが受信されるまでバイトごとに読み取ることを考えました。
この方法はまったく効率的ではないと思います。サーバーが 1024 バイトを送信した場合、recv()
1024 回呼び出されます。
NULL 文字が受信されるまで recv() する他の方法はありますか、または私が使用している方法よりも優れた方法はありますか?
EDIT:サーバーから送信されたデータの前にパケットサイズを追加しましたが、今では、誤ったパケットの場合、または理由がない場合でも、パケットがめちゃくちゃになり、正しいデータが受信されません。ここに私のコードがあります
c - WindowsでIPアドレスを取得する方法
私はすでに「socketfd」を持っていましたが、それを使用してローカルIPアドレスを取得する方法を考えていました。Linuxでは、次のようなことができます(正確ではありません):
しかし、Windowsでは、どうすれば同じ目標を達成できますか? (MFC は使用していません) どうもありがとうございました。
編集:私のホストには複数のIPアドレスがあるかもしれません.「socketfd」で「接続」したい.
c++ - TCP 接続を使用して HTTP サーバーからデータを取得すると、まれにガベージ データが存在する
Visual Studio 2010 を使用して、Winsocks 2.2 を使用して C++ でネットワーク ゲームを作成しています。Web サーバーを使用して、ゲームのアクティブなサーバーのリストを保存することをお勧めします。サーバーが起動すると、それ自体が Web サーバーに登録され、終了時に登録解除されます。誰かがサーバーリストにアクセスすると、サーバー自体がリストを消去しようとします(この動作は、サーバーであまり多くの作業を行わないように設計中ですが、ゲームサーバーが自分自身を追加しようとすると、 php ファイルは fsockopen を使用して、実際に外部ネットワークからサーバーにアクセスできるかどうかを検出します。そうでない場合は、ポート転送を適切にセットアップするか、何らかの方法で問題を解決できるまで、サーバーは追加されません)。
さて、いくつかの調査の後、HTTP サーバー用の特殊なメッセージをフォーマットすることで、TCP 接続を使用してサーバーから何かを取得する方法を見つけました。ここに私が持っているものがあります:
正確に取得していない、適切にフォーマットされたデータが返されることを期待しています。ここに私が得ているものがあります:
すべてのヘッダー情報を含むガベージの別の出力を次に示します。
これは私の出力がどのように見えるかであり、私は時々これを取得しますが、常にではありません:
これはあまり重要ではないと思いますが、これは Web サーバー上の私の PHP コードです。
文字列の受信に関連するコードの一部を次に示します (はい、現時点では少し骨の折れるものですが、cstring 関数を使用して 2 つの新しい行を探すことができるので、文字列のコピーを行う必要はありません。物事を簡単にするために文字列の使用に固執しようとしているだけです):
では、このガベージデータがどこから来ているのか知っている人はいますか?
編集: 正しいヘッダー情報を見た後、ゴミのあるものには「Transfer-Encoding: chunked」があり、「content-length」がありません。...何が起こっている?
c++ - ソケットはデータを送信しますが、応答を受信できません
私はC++でUpNPを実装しようとしていますが、グーグルでいくつかのソースを見つけましたが、どれも機能しませんでした。これは機能していることがわかりました(http://www.codeproject.com/KB/IP/upnplib.aspx)が、.NET用であるため、ネットワークをスニッフィングしてコードの動作を確認し、同じことを行うことにしました。ソケット。
結果は次のとおりです(フルサイズ:http://i.stack.imgur.com/eLoHK.jpg):
これは、パケットが悪く見えないことを示しています。すべてが同じように見えます。コードの送信元アドレスを除いて、制御方法がわかりません(コードとfinder.net.exeの両方がテストされています)。同じネットワークに接続された同じコンピュータ上)。
これが私のコードです:
コードを読みやすくするために、すべてのWSAGetLastError()エラーチェックを削除しました。recvfromまではすべて正常に実行され、常に-1が返され、strerror(WSAGetLastError())は「不明なエラー」を出力します。
誰かが私を正しい方向に導いてくれることを願っています。私はこの2日間、この仕事をしようとしてきました。
delphi - PChar StrPLCopy での無効なポインター操作
WinSock 2 を使用していくつかの TCP サーバーを作成し、FD_READ イベントをキャッチするプロシージャを作成しました。この手順では、受信したメッセージを解析する必要があります。コードは次のとおりです。
デバッグ中に、行に「アクセス違反...アドレスの書き込み...」があります
この問題を解決し、なぜそれが起こったのかを理解するのを手伝ってください. ティア!
delphi - 1つのPChar変数のGetMemは、他のPChar変数の内容を変更します
だから、私は次の問題を抱えています。2つのPChar変数があります。最初にメモリを割り当て、いくつかの操作を行い、2番目の変数にメモリを割り当てます-このステップで、最初の変数に不正な値が含まれています(デバッグ中に見ました)。コードは次のとおりです。
ライン上
可変のHEADER値を探すと、手順の最初に見たときと同じではなく、驚くべきことがわかりました。どうすれば修正できますか?
synchronization - I/O での同期アクセスについて I/O Completion での動作
プロセッサの数に対応する I/O Completion Port を使用する I/O ワーカーが 4 つある場合、それらはクライアント コンテキストで相互に同期アクセスする必要がありますか?
ここでのクライアント コンテキストは、I/O CompletionKey を介して渡されるものを参照します。問題は、ワーカー A がコンテキストを使用して I/O 完了キューに I/O をポストしたが、現在コンテキストを変更している場合です。I/O を処理するためにウェイクアップされたワーカー B は、同時にコンテキストを読み取ります。何が起こるでしょうか?
c++ - Winsocks 2 非同期の問題
非同期モードで winsock2 を使用しようとしています。クライアントからサーバーにメッセージを送信できますが、サーバーからクライアントには送信できません。クライアント側で recv を呼び出すと、バッファに何も受信されません。
これが私のクライアントコードです
これがサーバーコードです
//部分を送信
//部分を受け取る
私を助けてください