問題タブ [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.

0 投票する
3 に答える
5896 参照

c++ - XP と Vista の winsock API の違いを使用した UDP マルチキャスト

Windows XP と Windows Vista では、UDP マルチキャスト ソケットをセットアップするために必要な実装が変更されているようです。具体的には:

  • Windows XP では、マルチキャスト固有のソケット オプションを参照する前に呼び出す必要があります。bind()

  • ただし、Windows Vista では、マルチキャスト ソケットを処理するときに呼び出してはなりません。bind()

これら 2 つの点のいずれかが失敗すると、実行時にソケット エラーが発生します。

私は気が狂っていますか、それとも他の人もこれを見たことがありますか? bind() 呼び出しの条件付きコンパイルよりも良い解決策はありますか?

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

sockets - 複数のソケットを使用する場合、非ブロックまたは選択によるブロックの方が優れていますか?

10 (またはそれ以上) の異なるクライアントからの接続を受け入れることができるサーバー プログラムがあるとします。クライアントはランダムにデータを送信し、サーバーが受信しますが、更新ごとに少なくとも 1 つのクライアントがデータを送信することは確実です。サーバーは、他の処理を行う必要があるため、情報の到着を待つことができません。非同期ソケットを使用する以外に、次の 2 つのオプションがあります。

  1. すべてのソケットをノンブロッキングにします。ループ内recv()で各ソケットを呼び出し、WSAEWOULDBLOCK利用可能なデータがない場合は失敗させ、たまたまデータを取得した場合はそれを保持します。

  2. ソケットはブロッキングのままにします。すべてのソケットを に追加し、FD_SETを呼び出しますselect()。戻り値が 0 以外の場合 (ほとんどの場合)、すべてのソケットをループして、適切な数の読み取り可能なソケットを見つけ、読み取り可能なソケットFD_ISSET()のみを呼び出しますrecv()

最初のオプションは、関数へのより多くの呼び出しを作成しrecv()ます。FD_SET2 番目の方法は、すべてのandFD_ISSETループが原因で、プログラミングの観点からはより大きな問題になります。

どの方法 (または別の方法) が優先されますか? recv()呼び出しの面倒な価値があるノンブロッキングソケットで失敗することによるオーバーヘッドを回避していますselect()か?

私は両方の方法を理解しており、両方を試して成功したと思いますが、一方の方法がより良いまたは最適であると見なされるかどうかはわかりません。

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

java - xampp サーバーと Java クライアント/サーバー アプリケーション

ハイホー、

チャットのようなちょっとしたネットワーク アプリケーションを開発するつもりです。だから私はWindows用のxamppをダウンロードしてインストールしました(サービスとしても)、mysqlが含まれています。さて、私はApache(およびmysql)をサービスとして開始し、Javaで短い行を書きました:

しかし、直接私は答えを得ました:

サーバーは実行中です。ブラウザでローカルホストにアクセスできます。

私は何かを忘れましたか?何か案は?

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

c++ - Win32 で現在のホストの FQDN を取得するには?

Win32 で現在のホストの完全修飾ドメイン名を取得する最も簡単で信頼できる方法は何ですか?

gethostname() を呼び出してみましたが、NetBIOS 名が返されます。

0 投票する
6 に答える
1973 参照

c++ - 別のユーザーになりすましているときにWindowsがWinSockの起動を許可しないのはなぜですか

プロセスがCreateProcessWithLogonWまたはCreateProcessAsUserWで作成されている場合、自分のプログラムまたは他のプログラムを使用すると、呼び出し時にwinsockを実行できません。ソケットを作成すると、次のエラーが返されます。

サービスプロバイダーが初期化に失敗しました。

このエラーは、サービスプロバイダーのDLLを読み込めなかった場合(LoadLibraryが失敗した場合)、またはプロバイダーのWSPStartupまたはNSPStartup関数が失敗した場合に返されます。

ただし、WSAStartupエラーが発生しないようです。WSASocketでソケットを作成するだけで、これが返されます。

アップデート:

エラー:

LoadUserProfile:エラーコード2。指定されたファイルが見つかりません

AdjustTokenPrivs:エラーコード5。アクセスが拒否されました

0 投票する
4 に答える
2645 参照

c++ - Winsock2:VC ++でlistenのバックログを使用して、一度に1つのクライアント接続のみを許可する方法

TCPサーバーから一度に1つの接続のみを許可したい。バックログの長さをゼロにせずにlistenを使用する方法を教えてください。

コード(下記)を使用していますが、2つのクライアントを1つずつ起動すると、両方が接続されます。私はwinsock2でVC++を使用しています。

listen(m_socket、-1);

バックログとしてゼロを渡すことも機能していません。

返信を待っています。

よろしく、
immi

0 投票する
3 に答える
596 参照

windows - 最小限の Winsock2 アプリのパフォーマンス デバッグ ネットワーク スループット

私は非常に単純な Winsock2 TCP クライアントを持っています (完全なリストを以下に示します)。これは単純に大量のバイトを爆破します。ただし、ネットワーク上での実行速度は非常に遅いです。データは少しずつ流れていきます。

これが私が試して見つけたものです(両方のWindows PCが同じLAN上にあります):

  • このアプリを 1 台のマシンから別のマシンに実行すると時間がかかります。8 MB を送信するのに ~50 秒かかります。
  • 2 つの異なるサーバー (netcat とカスタム作成のサーバー (以下のクライアントと同じくらい単純)) で同じ結果が得られました。
  • taskmgr は、CPU とネットワークの両方がほとんど使用されていないことを示しています。
  • 同じマシン上のサーバーでこのアプリを実行すると高速です。8MB を送信するのに約 1 ~ 2 秒かかります。
  • 別のクライアントである netcat は問題なく動作します。20MB のデータを送信するのに約 7 秒かかります。(Cygwin に付属の nc を使用しました。)
  • バッファー サイズ (1*4096、16*4096、および 128*4096) を変更しても、ほとんど違いはありませんでした。
  • 別の LAN 上の Linux ボックスでほぼ同じコードを実行すると、問題なく動作しました。
  • 呼び出しの周りに一連の print ステートメントを追加すると、sendほとんどの時間をブロックに費やしていることがわかります。
  • サーバー側では、<= 4K チャンクの受信が多数見られます (送信者がプッシュしているバッファーのサイズに関係なく)。ただし、これはフルスピードで実行される netcat などの他のクライアントでも発生します。

何か案は?ヒントをお寄せいただきありがとうございます。

0 投票する
4 に答える
47093 参照

c++ - IPv4 と IPv6 の両方の接続をサポートする方法

私は現在、UDP ソケット アプリケーションに取り組んでおり、IPV4 および IPV6 接続がサーバーにパケットを送信できるように、サポートを組み込む必要があります。

誰かが私を助けて、正しい方向に向けてくれることを望んでいました。私が見つけたドキュメントの大部分は完全ではありませんでした。また、Winsock ソケットと BSD ソケットの違いを指摘していただけると助かります。

前もって感謝します!

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

c# - ASP.net (MVC) と Winsock

私はasp.net MVCを使用しています。サーバーから( asp.net を使用して)データを(win32コンソールコマンドライン)を使用して別のサーバーに送信する方法がわかりません。助けてください。

P/S: この方法にセキュリティ ホールはありますか。