問題タブ [recv]
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.
python - Python:recv へのこのノンブロッキング呼び出しがブロックされるのはなぜですか?
スレッドの $ init呼び出しに次のコードがあります。
conn はソケットであり、引数として $ initに渡され ます。すべてのスレッドは一意のソケットを受け取ります。run メソッドには次のものがあります。
タイムアウトは 0.0 として出力されますが、「hi from threadname」はメッセージが受信されたときにのみ出力され、例外は決して発生しません! recv メソッドがブロックされているように見えますが、なぜそうなるのでしょうか?
sockets - ソケットプログラミング:recv()とread()の動作が同じでないのはなぜですか?
select()
stdinからデータを受信するために使用します。
コードはここにあります:
このコードでは、recv()
は常にを返します-1
がread()
、正しいデータを取得できます。
これは、パラメータが。のread()
場合と同等であることがわかります。それでは、なぜ私のコードの動作は同じではないのですか?recv()
flags
0
recv()
read()
linux - ソケットにデータが残っているかどうかを判断し、破棄します
TCP ソケットからデータを取得する Linux でインターフェイスを作成しています。ユーザーは、受信したデータが格納されるバッファを提供します。提供されたバッファが小さすぎる場合は、エラーを返したいだけです。最初の問題は、バッファが小さすぎたかどうかを判断することです。recv() 関数は、実際にバッファに書き込まれたバイト数を返すだけです。recv() マンページに記載されている MSG_TRUNC フラグを使用しても、同じ結果が返されます。2 番目の問題は、ソケットにまだキューに入れられているデータを破棄することです。したがって、提供された Buffer が小さすぎると判断した場合は、ソケットに残っているものをすべて消去したいだけです。ソケットを閉じて再度開くか、何もなくなるまで受信する以外に、他の方法はありますか? よろしくお願いします
トビー
python - Is there a way to know how much data is available in a Python socket to receive?
I have figured out that I must use ioctl. There are similar questions here:
- How to tell how much data is in a Socket's send buffer
- Determing the number of bytes ready to be recv()'d
My questions are:
- What is an equivalent to FIONREAD in Python? How do I call sock.ioctl() to obtain the amount of bytes available?
- What if I am using Python 2.5 on Windows? socket.ioctl is new in version 2.6.
c - Cの単純なTCPクライアントサーブモデル:クライアントが受信しない
cで単純なTCPクライアントサーバーを作成し、クライアントからサーバーにメッセージを送信しようとしていますが、いくつか問題があります。サーバーはメッセージを送信しますが(整数値> 0)、クライアントはメッセージを受信できません(整数値> 0)。コードは次のとおりです。クライアント
サーバ:
私が取得する出力(最初にサーバーを起動し、次にクライアントを起動した後)は、サーバー側:9クライアント側:-1 hello
Ubuntu11.04とgccコンパイラを使用しています。
誰かが助けてくれることを願っています。ありがとうございました
ウマル
c - CでソケットからTCPペイロードをすぐに(パケットごとに)受信します
C で開いているネットワーク ソケットからパケット単位でデータ (バイト ストリーム) を受信するにはどうすればよいですか? ソケットが到着したらすぐに(パケットがマシンに到着するとすぐに)ソケットからデータを読み取りたいと思います。
ソケットで read() (または recv()) 呼び出しを実行すると、10,000 バイト以上の TCP メッセージ全体を取得しているようです。むしろ、最初の TCP セグメント ペイロードを受信し、処理してから、次へと進みたいと考えています。
注 - 生のパケットは必要ありません。TCP セグメント データ ペイロードのみ。
また、注意してください-本質的に、TCPメッセージ全体がTCPレイヤーに蓄積されるのを待つのではなく、データが到着したらすぐに処理することにより、遅延を最小限に抑えたいと考えています。
どんなアイデアでも大歓迎です、ありがとう!
python - Python ブロッキング recv は、要求されたよりも少ないデータを返します
C のエコー サーバーと Python のテスト クライアントがあります。サーバーの読み取りバッファは制限されています (例: 16 バイト)。クライアントが 16 バイトを超える送信を行う場合、最初に 16 を読み取り、クライアントに書き戻してから再度読み取ります。
サーバーを でテストしたtelnet
ところ、16 バイトを超えていても、入力と同じ文字列が返されました。ただし、この Python クライアントは機能しません。
このクライアントは、サーバーが書き戻す最初の 16 バイトのみを受け取ります。サーバー ログには 2 回の書き込み (16 + 4) が表示されます。Pythonの出力は次のようになります
なぜこれが起こっているのかわかりません.ブロッキングrecv()
が要求されたよりも少ないデータを返すのはなぜですか?
c - CWindowsのバッファサイズ
Windowsでは、このrecv
関数を使用してソケットからデータを受信しているとしましょう。最適なバッファの大きさに興味がありますか?バイトにすることも、1024
バイト以上にすることもでき51200
ます。どちらがパフォーマンスに優れているのだろうかと思います。
recv
これは関数だけに当てはまるわけではありません。たとえば、大きなテキストファイルを読んでいる場合、非常に大きなバッファが必要ですか、それとも小さなバッファが必要ですか。
c++ - recv ループから抜け出すにはどうすればよいですか?
ネットワークデータを受信するためにループで関数を使用していrecv
ますが、ループの途中でデータの受信を停止したいとしましょう。ループを中断することはできますが、これはデータの受信を停止するための非常にクリーンな方法とは思えません。
それで、データの受信をきれいに停止する方法はありますか、それともループを壊すだけですか? HTTP GET/POST リクエストです。
ここで私が使用している単純化されたものです: