問題タブ [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++ - C ++、Send()関数は余分なバイトを送信します
Winsock2ラッパークラス(クライアントサーバー)で問題が発生し、数え切れないほどの混乱の中で頭を悩ませた後、あなたの意見を聞いた方がよいと判断しました。
具体的には、Send()関数を使用するたびに、クライアントとサーバーの両方(常にではありません!)が1バイトまたは2バイト余分に送信するという問題があります。
たとえば、SendBytes( "Hello")を使用すると、Recv関数は文字配列の最後に「•」またはその他のランダムな文字を含む「Hello•」を返します。
もちろん、サーバーは文字列「X5」を送信し、クライアントはstrlensを出力します...
送信//受信機能
助けていただければ幸いです^_^。
c++ - UDPサーバーが接続してデータを送信する奇妙な
私は、教育目的で async (ノンブロッキング rly) ソケット lib を作成しています。TCP 部分は正常に動作しますが、UDP に関しては奇妙な動作が発生します。次のコードは期待どおりに機能します - サーバーはデータを受け取ります:
ただし、Sleep() または client.Write("\x0", 1); のいずれかの場合。コメントアウトされています-機能しなくなります。サーバーはデータを取得できません。ソケットが正確にどのように作成されるかの手がかりを得るために、私のライブラリのいくつかの部分を次に示します。
ご覧のとおり、派手なものはありません。たぶん、接続を初期化するために1バイトのデータを送信する必要があるという暗黙のルールか何かですか?私はここで本当に混乱しています。
編集:要求に応じて関数を書きます。name 変数は、上記のコードの Connect 呼び出しで設定されているものとまったく同じです。
編集: select() ループでも、読み取り可能なソケットのみをチェックします。接続が初期化されているため、ソケットが書き込み可能ではない可能性がありますか? その場合は、First sleep を解決する必要があります。しかし、1 バイトを送信する場合はどうでしょうか。
c - サーバー上のファイルを一覧表示する ftp クライアント プログラムを作成する最良の方法は?
Windows で C 言語でクライアント サーバー プログラムを作成しようとしています。目的は、サーバーからディレクトリ リストを受信することです。今、私はほとんどのリソースを利用するような方法でクライアントサーバーを開発しようとしていました.
実装する 1 つの方法は、サーバーが 1 つの send() 呼び出しを行って、1 つのファイルの情報を送信することです。したがって、100 個のファイルがある場合、100 回の呼び出しが行われます。しかし、私はそれがネットワーク リソースの浪費だと感じています。私の知る限り、Windows の send() または recv() のバッファ サイズは 8kb です。しかし、1 ファイルの情報は 1kb にも満たないでしょう。send() を呼び出して複数のファイル情報を送信する方法はありますか (ファイル情報は構造体に格納されているため、基本的にリンクされたリストを形成します)。1 回の Send() 呼び出しで、少なくとも 8 つのファイルの情報を送信できる可能性があります。これにより、合計 send() 呼び出しが最大 13 に減るはずです。
したがって、基本的に send() 経由でリンクされたリストを送信する方法はありますか?? 代わりの方法があれば教えてください。
c# - Winsock 2 DLL の C# ラッパー?
Silverlight 5 (RC) がP/Invokeをサポートするようになったので、サーバー機能を備えた Socket クラス、つまり Bind、Listen、Accept メソッドなどを実装するクラスを実装することを考えています。P/Invoke を使用すると、アクセスできるようになります。 Silverlight クラス ライブラリの ws2_32.dll のソケット メソッド。
できれば、先手を取りたいです。それはロングショットですが、Winsock 2 DLL に C# ラッパーを実装した人はいますか? その場合、この取り組みは公開されていますか?
もちろん、Monoプロジェクトは C# で独自のSocket実装を提供しますが、このコードには控えめに言っても、多少のオーバーヘッドが伴います。もしあれば、より軽量なソリューションを探しています。
qt - MinGW を使用して winsock2.h を含めることができません
MinGW で Qt Creator を使用しています。
「windows.h」をインクルードしてコンパイルしましたが、失敗しました。エラーは以下のとおりです。
MinGW のパスが抜けていると思っていたのですが、そうではありません。どうすればこれを修正できますか?
c - socket() は -1 を返しますが、errno は 0 です
mingw で UDP ソケットを作成しようとしましたが、errno =で がsocket()
返されます。変。winsock2.h を含めました。最初はコンパイルエラーがありましたが、Code::Block の Linker Settings を設定した後
、コンパイルは成功しました。-1
0
undefined reference to socket@12
-lws2_32
-lwsock32
結果 --> sockfd -1 エラー: エラーなし、errno 0
OK、代わりに RDF_LOG を fprintf に変更します。
返される結果は、まだ --> sockfd -1 socket: No error , errno 0 mingw が errno をサポートしていない可能性はありますか??
c++ - UDPブロードキャストを聞く
UDP経由で着信するネットワークブロードキャストを聞く必要があります。データグラムにはj4cDAC_broadcast
構造体が含まれています。私はいくつかのチュートリアルに従ってみましたが、それらはいくつかのことを省略しているようで、もしあれば、非常に詳細な説明がありません。
私が今持っているもので私はBIND FAILED 10049
エラーを受け取ります、そしてエラー10049はアドレスが利用できないことを示します。放送は255.255.255.255:7654に来ています。このエラーを修正するにはどうすればよいですか?
これは私がこれまでに持っているものです:
また、私が見つけられなかったもう1つのことは、ヘッダーから送信者のIPアドレスを取得する方法でした。
c++ - WinSock2: recv と send を使用して、受け入れられた着信接続を別々のスレッドで処理する
WinSock2を使用して、クライアントからの複数の特定の HTTP 要求を処理する Windows ベースの Web サーバーを実装しています。サーバーを起動および停止するクラスがあります。次のようになります。
ここTLM_ERROR
で、サーバーのエラー列挙の型定義です。
bool CMyServer::Start()
メソッドはサーバーを起動し、構成されたポートでリッスンするソケットを作成し、DWORD CMyServer::Run(LPVOID)
ここで説明するように着信接続を受け入れる別のスレッドを作成します。
::accept(...)
で着信クライアント接続を待機するために使用しCMyServer::Run(LPVOID)
、新しい接続が受け入れられた後、別のスレッドを作成してクライアントからデータを受信し、スレッド関数の引数の一部としてCMyServer::ProcessRequest(LPVOID)
返されたソケットを渡す応答を送信します。::accept(...)
この実装を手動でテストすると、望ましい結果が得られます。しかし、JMeterによって生成された複数のリクエストを送信すると、そのうちのいくつかが .NET によって適切に処理されていないことがわかりますDWORD CMyServer::ProcessRequest(LPVOID)
。によって作成されたログ ファイルを見ると、ProcessRequest
10038 WinSock エラー コード(非ソケットで呼び出しが試行されたことを意味する::recv
)、10053 エラー コード (ソフトウェアが原因で接続が中止された)、さらには 10058 エラー コード (ソケットのシャットダウン後に送信できません) を特定できます。しかし、10038 番目のエラーは、他の人が言及したよりも頻繁に発生します。
ソケットが何らかの理由で閉じられたように見えますが、後で閉じて、 で::recv
呼び出さ::send
れましたProcessRequest
。また、 ::_beginthreadexの代わりに::CreateThreadを使用することに関連する問題である可能性があると考えましたが、メモリリークにつながる可能性があるだけです。ここで説明されている方法でメモリリークが検出されていないため、それが理由であることに疑いがあります。さらに、スレッドが終了するのを待つために::WaitForMultipleObjectsで使用できるハンドルを返します。これは、サーバーを適切に停止するために必要です。::CreateThread
これらのエラーは、クライアントが応答を待ちたくないために発生する可能性がありますか? 私はアイデアがありません。私が見逃していること、または行っていること/理解が間違っていることを教えていただければ幸いです。ちなみに、サーバーも JMeter もローカルホスト上で動作しています。
最後に、ProcessRequest
メソッドの実装を次に示します。
winsock2 - Getaddrinfoメソッドを使用した概念クエリ
getaddrinfoメソッドを使用する場合、IPアドレスとポート番号を指定します。out変数にリンクリストを取得しています。正常に動作します。しかし、私はここで概念的な疑問を持っています。IPアドレスとポートの両方を指定している場合、返される可能性のあるソケットが非常に多いのはどうしてですか?1つだけあるべきではありませんか?
c++ - ローカルホストへの単純なソケットが接続しないのはなぜですか?
win32 ソケット (winsock2) の使用方法を教えてくれるチュートリアルに従っています。「localhost」に接続する単純なソケットを作成しようとしていますが、(関数 connect() で) ローカル ホストに接続しようとするとプログラムが失敗します。
ローカルホストに接続するには管理者権限が必要ですか? 多分それが失敗する理由ですか?私のコードに問題があるのでしょうか?ポート 8888 と 8000 を試しましたが、どちらも失敗します。
また、ポートを 80 に変更して www.google.com に接続すると、接続できますが、応答が返されません。HTTP リクエストを送信していないためですか、それとも何らかの応答を返すつもりなのでしょうか?
これが私のコードです(インクルードは削除されています):