問題タブ [winsock2]
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++ - ソケットプログラミング Xp > Vista、Vista > XP
あるコンピューターから別のコンピューターに画像を送信するプログラムを開発しています (マウス/キーボード入力のないリモート アシスタンスに似ています)。これをテストするために使用する 2 台のコンピューターは、1 台の Windows XP マシンと 1 台の Windows Vista です。ルーターに直接接続された静止型の XP マシンと、ワイヤレスで接続されたラップトップがあります。
XP から Vista への転送はうまく機能し、Vista に表示される画像を一定の流れで取得できます。ただし、それをめくって Vista から XP に画像を送信すると、機能しません。また、ローカルの「コピー」も試しました。つまり、ネットワークを使用せずに画像の流れを取得すると、これは XP だけでなく Vista でも機能します。両方のマシンでまったく同じプログラムです。
関係ないと思いますが、画像に GDI+ を使用しています。そこで、ネットワーク上のストリームを介して .jpg を送信し、反対側で再構築します。
私の Network Message クラスは と呼ばれNetMsg
ます。と で構成されchar* type
ますchar* data
。タイプによってデータの解釈方法が決まりますが、ここでは問題ありません。
コンピューターを #1 と #2 とします。
接続が作成され、送信したい #1 の領域をマークした場合:
001> #1 はタイプ RESIZE を送信します // #2 のウィンドウを #1 でマークした領域と同じサイズにします
002> #1タイプ PICTURE_DATA を送信します // これは実際の画像データです
003> #2 上記の 2 つのメッセージを受信した後、タイプ REQUEST_MORE を送信します // #2 はさらに画像データが必要です
004> #ステップ 1 に進みます
XP から Vista に画像データを送信するときにデバッグすることさえ気にしませんでした。ただし、Vista が XP に送信したときに、次のことに気付きました。
- 実際に受け取ったデータは 2 つ
NetMsgs
です。データをいくつかに分割することでこれをサポートしていますNetMsgs
- 受信したデータが不完全な場合があります。つまり、さらにデータを待つ必要があります。
NetMsg
を不完全としてマークし、次のデータ送信でそれを完了することで、これをサポートしています。(および最初のステップの組み合わせ)
一部の画像が正しく転送されたため、これでほとんどうまくいきましたが、突然停止しました。私はこれを完全にデバッグしていないので、なぜデータが突然停止したのかわかりません..しかし:
私が理解していないのは、これは XP から Vista に送信する場合はうまく機能するが、その逆では機能しないということです。私は何が欠けていますか?
コードの抜粋が必要な場合はお知らせください。ただし、かなり巨大です...約500行..それ以外の場合は、VistaからXPにデータを送信する際の既知の問題を探しています。
ヘルプやフィードバックをいただければ幸いです。
c++ - リモート プロセスへの Winsock2 recv() フック
カスタムの recv() winsock2.0 メソッドをリモート プロセスにフックしようとしていたため、プロセス内の関数ではなく関数が実行されました。これをグーグルで調べたところ、本当に良い例がいくつか見つかりましたが、説明が不足しています。
さて、私の質問は、これはどういう意味ですか、またはこれは実際の recv() 関数へのある種のポインターですか?
そして、カスタム関数のもう 1 つのコード
これらの質問が本当に基本的に聞こえる場合は申し訳ありませんが、私は 2、3 週間前に学習を始めたばかりです。ありがとう。
c++ - winsock2でC++を使用してソケットを作成する際の問題
私は頭痛を引き起こす最も奇妙な問題を抱えています。次のコードを検討してください。
何が起こっているのかは、receive_socketがバインドされていないことです。SOCKET_ERRORが発生します。プログラムをデバッグしてreceive_socketを確認すると、文字化けしているように見えます。'std::map'行にブレークポイントを設定しました。上記のコードの各行にステップインすると、ステップイン(F11)を使用していても、デバッグカーソルが「unsignedshortport」行から最初の「local_address.sin」行に直接ジャンプします。 struct、int、char、またはSOCKETの行は、それらをまっすぐ飛び越えます。
この時点で、local_address、from_address、result、buffer、およびreceive_socketにマウスを合わせます。それらはすべて文字化けしたがらくたでいっぱいです。これは、これらの変数をまだ定義していないためですか?上記のコードの最後に到達すると、local_address.sin_portが19992に設定されていることにも気づきましたが、6222である必要がありますか?
編集:ifステートメントが真であるために失敗している私のバインディングコードは次のとおりです:
c - 従来のWindowsを対象とするgetaddrinfo()およびfreeaddrinfo()の代わりに何を使用しますか?
要件により、利用できない古いレガシーWindowsシステム(9xブランチ)をターゲットにgetaddrinfo()
しfreeaddrinfo()
ています。
その代わりに何を使用できますか?現在使用しているコードは、MSDNサイトから抽出されています(Vistaコンピューターでテストしています)。
c - ソケットを使用して接続プロキシを使用することは可能ですか?
SSL プロキシがオンになっている環境からサーバーに接続する必要があります。ソケットだけを使用してその環境を処理することは可能ですか? それは非SSLプロキシでしたか?それは可能でしょうか?
どうもありがとうございました。
c - getaddrinfo() と freeaddrinfo() を使用して、従来のバージョンの Windows と互換性のあるプログラムを維持する方法はありますか?
Winsock2 ライブラリgetaddrinfo()
にありfreeaddrinfo()
、Windows XP 以降でのみ追加されました。レガシー システムでそれらを置き換える方法は知っていますが、Windows のバージョンに応じた条件付きの使用は役に立ちません。
アプリケーションは、WS2_32.dll の不足しているエクスポートにリンクされているというメッセージが表示されて、9x で起動しません。
私は MinGW を使用してコードをコンパイルおよびリンクしていますが、引き続き使用したいと考えています。たぶん自分でそれらの関数を書いていますか?
いろいろとありがとうございました。
delphi - delphi winsock2ライブラリはありますか?
WSASocket関数などを使用する必要があります...
c# - Winsock tcp / ipソケットをリッスンしていますが、接続が拒否されました。競合状態ですか?
これには、2つの自動化された単体テストが含まれます。それぞれが非ブロッキングソケットを作成するtcp / ipサーバーを起動し、データを接続してダウンロードするクライアントのselect()のループでbind()とlisten()を実行します。
問題は、個別に実行すると完全に機能することですが、テストスイートとして実行すると、2番目のテストクライアントはWSACONNREFUSEDとの接続に失敗します...
そうでもなければ
それらの間に数秒のThread.Sleep()がありますか?? !!!
興味深いことに、障害が発生した後は、接続のために1秒ごとに再試行ループがあります。したがって、2番目のテストは10分後にタイムアウトするまでしばらくループします。
その間、netstat -naは、サーバーソケットの正しいポート番号がLISTEN状態にあることを示します。それで、それがリッスン状態にある場合はどうなりますか?なぜ接続を受け入れないのですか?
コードには、select NEVERがソケットを読み取る準備ができていないことを示すログメッセージがあります(つまり、リスニングソケットに適用されるときに接続を受け入れる準備ができていることを意味します)。
明らかに、問題は、ソケットの両端でclose()とshutdown()を意味する1つのテストを終了してから、次のテストを開始するまでの競合状態に関連している必要があります。
再試行ロジックによって、数秒後に最終的に接続が許可された場合、これはそれほど悪くはありません。しかし、それは「ぐちゃぐちゃになっている」ようで、再試行すらしません。
ただし、奇妙な理由で、リスニングソケットは、接続を拒否し続けても、リッスン状態にあると言います。
つまり、実際にSYNパケットをキャッチしてRSTパケット(「接続が拒否された」を意味する)を返すのはWindoze O/Sです。
私がこのエラーを目にしたのは、コードに問題があり、何百ものソケットがTIME_WAIT状態でスタックする原因となったときだけでした。しかし、ここではそうではありません。netstatは、任意の時点でTIME_WAITに1つまたは2つしかない約12個のソケットのみを表示します。
助けてください。
c++ - 特定のソケットのTCP受信ウィンドウを増やす
特定のソケットのTCP受信ウィンドウを増やす方法は?-レジストリキーTcpWindowSizeを設定することにより、すべてのソケットに対してこれを行う方法を知っていますが、特定のソケットに対してどのように行うのですか?
MSFTの文書によると、その方法は
ソケットごとに受信ウィンドウを設定するWindowsSockets関数setsockoptを呼び出します。
しかし、setsockoptでは、SO_RCVBUFについて言及されています。
受信用に予約されているソケットごとのバッファスペースの合計を指定します。これはSO_MAX_MSG_SIZEとは関係がなく、TCP受信ウィンドウのサイズに必ずしも対応しているわけではありません。
それでそれは可能ですか?どのように?
ありがとう。
c++ - Bluetoothサービスの問題
カスタムBluetoothサービスを作成する必要があり、C++を使用して開発する必要があります。多くの例を読みましたが、カスタムUUIDを使用して新しいサービスを公開することに成功しませんでした。Androidアプリからサービスに接続できるようにするには、UUIDを指定する必要があります。これは私が書いたものです:
getgetsocknameで取得したSOCKADDR_BTH構造を出力すると、私のものではないUUIDが取得されます。さらに、getsocknameから読み取ったUUIDを使用してAndroidアプリケーションに接続すると、次の例外で接続が失敗します。
私たちを手伝ってくれますか??
ありがとう!