問題タブ [winsock]
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.
winapi - XP sp3 で低いポート番号 (80) にバインドできない
ソケット クラスに次のコードがあります。
「Error()」メソッドは WSAGetLastError を呼び出すだけで、エラーとその説明をアプリに渡します。とにかく、私のマシン (xp sp2) では正常に動作しますが、友人の xp sp3 マシンでは失敗します。具体的には、バインド呼び出しが失敗し、WSAGetLastError が "2" を返します。これは、有効なソケット エラー コードでさえありません。渡された「ポート」の値は 80 です。サービスの UI として単純な HTTP サーバーを実行しています。>= 0 をチェックする理由は完全にはわかりませんが、このコードを使用している Windows 以外のプラットフォームに関連している可能性があります。いずれの場合でも、MSDN によると、バインドのエラーの戻りコードは SOCKET_ERROR であり、これは -1 であるため、チェックは問題ないはずです。
簡単なことを見逃していませんか?
更新: 別のポート番号 '8888' を試したところ、すべてが期待どおりに機能しました。したがって、ポート番号が低いことが問題のようです。サービスを実行する前にそのポートで積極的にリッスンするものは何もないので、Linux/Unix の方法と同様に、特定のパーミッションがない限り、1024 未満のポートでリッスンするプロセスを停止する SP3 のある種の新しいパーミッションの問題であると考えています。物事を行うこと。それでもなんとか整理できるようになりたいです。
windows-services - どのローカルアプリケーションがソケットに接続されているかを知る方法(Windows)
いくつかのTCPポートにバインドするWindowsサービスがあります。このポートは、アプリケーション間のIPCに使用されます。
どのアプリケーションが私のポートに接続されているかを知るためのプログラミング(WinAPI / WinSocketなど)の方法はありますか?
つまり、Windowsサービスで、自分のポートに接続されているプロセスのPIDを取得したいと思います。
c++ - Winsock 2 の移植性
私は C++ でいくつかのソケット関連のものを開発しようとしており、最初からソフトウェアを Windows と Linux の間でできるだけ移植できるようにしたいと考えています (後で移植できるようにするのは難しいです)。
私はさまざまなライブラリを見てきました.alhem.netのC ++用のライブラリがあり、もちろんboost::asioもあります。boost::asio は非常に有望に見えますが、この小さなアプリケーションにとっては非常に大きな依存関係になるでしょう。
自分で何かを書く価値はありますか、それともライブラリを使用するだけですか? 自分でやる場合、主な落とし穴は何ですか?
c++ - Winsockは、制御不能にいくつかの永続的なスレッドを生成します
WSAEventSelect
非同期操作に使用するネットワークフレームワークを設計しています。スレッドあたりの最大イベント数が64であるため、64番目のソケットごとに1つのスレッドを生成します。ただし、次の1つを除いて、すべてが期待どおりに機能します。
スレッドは、接続および切断中にWinsockによって制御不能に生成され続け、スレッドは消えません。
フレームワークの現在の設計では、アクティブなソケットが数個しかない場合に2つのスレッドを実行する必要があります。そして予想通り、合計2つのスレッドが実行されています。ただし、いくつかのソケット(1〜5ソケット)で接続すると、アプリケーションを閉じるまで持続する追加の3つのスレッドが生成されます。また、いずれかのソケットで接続が失われると、さらに2つのスレッドが生成されます(これも閉じられるまで持続します)。これは合計7つのスレッドであり、そのうち5つは何のためにあるのかわかりません。
Winsockが接続などに必要とし、その後消えた場合は、それで問題ありません。しかし、アプリケーションを閉じるまでそれらが持続するのは気になります。
これに光を当てることができる人はいますか?おそらく、これらのスレッドを回避するか、アクティブな接続がないときにスレッドを強制的に閉じるための解決策ですか?
(アプリケーションは、Win32およびWinsock2.2を使用してC++で記述されています)
Process Explorerからの情報:
予想されるスレッド:
MyApp.exe!WinMainCRTStartup
MyApp.exe!Netfw :: NetworkThread :: ThreadProc
予期しないスレッド:
ntdll.dll!RtlpUnWaitCriticalSection + 0x2dc
mswsock.dll + 0x7426
ntdll.dll!RtlGetCurrentPeb + 0x155
ntdll.dll!RtlGetCurrentPeb + 0x155
ntdll.dll!RtlGetCurrentPeb + 0x155
予期しないスレッドはすべて、関数への呼び出しを含む呼び出しスタックを持っていますntkrnlpa.exe!IoSetCompletionRoutineEx+0x46e
。これは、おそらく通知メカニズムの一部であることを意味します。
c++ - Winsockエラーコード10014
私はかなり頻繁に「失敗」を返しているようです。「returnfailed」のブレークポイントに到達したときのさまざまな変数の値は次のとおりです。
url: "/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32 %5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c "
hst:「bgfx.net」
ホスト:NULL
エラー:10014
何が起きてる?さらに重要なのは、どうすれば修正できますか?
注:SendRequestToServerの元のパラメーターは、「bgfx.net/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%」です。 74%65%6d%33%32%5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c "
この前にWSAStartupが呼び出されました。
php - Delphi から外部 php スクリプトを実行する
わかりました - これは、php スクリプトを使用してメールを送信することに関する私の以前の質問からの続きです。現在、PEARを使用してメールを送信しています。私が使用するphpスクリプトは次のとおりです(単独で実行すると成功します):PHPEMail.php
Winsock を使用して、いくつかの変数を渡し、Delphi からこのスクリプト (PHPEMail.php) を実行する必要があります。私はこのコードを使用します-これまで成功していません:
Webサーバーに送信される「TheData」に問題があると確信しています。PHPスクリプトはトリガーされません。誰が何がうまくいかないのか考えていますか?
(注: 私は winsock を使用したいのですが、サード パーティのコンポーネントは必要ありません。サーバーである完全なコードは、重量が約 12ko で、一部のハードウェアに組み込まれる予定です)。
最後に最終コードを参照してください。
サーバー ログに POST が表示されなかったので、コードを改善しました (エラー メッセージもいくつかあります)。現在、サーバーのログは、送信されたパケットの痕跡を示しています...つまり、通常のIDと時間に加えて、文字「P」...おそらく「POST」(送信されたデータ)という単語の最初の文字です。したがって、「Send()」コマンドを調査する必要があります。(私はDelphi 2009を使用しています)。winsock または send コマンドからエラーが発生しません。
POST を待機する pearemail.php スクリプト:
vb.net - winsock プログラム
インターネット経由で win sock コントロールを使用してリモート システムと通信する方法を教えてください。これは、vb.net 2005 の例または任意のアイデアを与える可能性があります
winsock - gethostbyaddr()にエラー11001があります
スマートデバイス間で通信するための簡単なプログラムを書いていますが、gethostbyaddr()を呼び出すと11001を受け取ります。両方のデバイスは、同じネットワークに接続されていることを示していますが、msdnドキュメント11001から、ホストが見つかりませんというエラーが発生します。そのようなホストは知られていません。誰か提案がありますか、ありがとう。私のコードは以下の通りです。
c++ - WSACleanup と atExit
atExit 関数で WSACleanup を登録してもよろしいですか? コード内のさまざまなポイントで終了できるアプリケーションがいくつかあるため、コード全体で WSACleanup を配置することは避けたいと考えています。現在、これらすべてのアプリケーションで使用される dll があるため、DllMain を介して WSAStartup / WSACleanup を呼び出しています。ただし、Microsoft は、デッドロックが発生する可能性があるため、DllMain を介して WSAStartup / WSACleanup を使用しないことを強く推奨しています。WSAStarup を DllMain から移動し、Windows ソケット ライブラリにアクセスする前に、すべてのアプリケーションのコード内のある時点でこれを呼び出すことができます。そして、WSAStartup を呼び出すとすぐに、atExit 関数を使用して WSACleanup への呼び出しを登録します。誰もこのアプローチの経験がありますか? ありがとう!
ssl - WinSock で OpenSSL を使用するにはどうすればよいですか?
私はウェブを精査しましたが、これについては何も見つかりませんでした...
OpenSSLでWinSockを使用する簡単なコードサンプルはありますか? Winsock 接続を作成して開き、OpenSSL を使用して必要な SSL 設定を適用し、すべてのリソースを適切に解放する、単純な Visual C++ 2005 以降のコード サンプルを探しています。