問題タブ [tcpclient]

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 投票する
2 に答える
2803 参照

java - Java SocketChannel 私のバイトを食べる

Tomcat でメッセージを送受信するために、リモート サーバーへの SocketChannel を作成しました。リモート コンピューターからメッセージを受信するために、タスク専用のスレッドを使用しました (このスレッドのみがソケットから読み取ります)。

SocketChannel でいくつかのバイトが受信されると (新しいデータのために非ブロッキング モードで SocketChannel をポーリングし続けます)、最初に 4 バイトを読み取って次のメッセージの長さを取得し、次に SocketChannel から x バイトを割り当てて読み取ります。次に、デコードしてメッセージに再構築します。

以下は、受信スレッドのコードです。

SocketChannel から受信した最初のバイトは問題なく、メッセージのデコードに成功しました。しかし、次に SocketChannel から読み取ると、ソケットが約 100 バイト先にスキップしたため、間違ったバイトが読み取られて長さとして解釈され、すべてが破損しました。

コードの何が問題になっていますか? SocketChannel から読み取っているスレッドは他にありません。

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

c# - TCPClientとRAWFTPを使用してファイルを取得する

TCPClientとRAWFTPを使用してファイルを取得しようとすると、次のメッセージが返されます。

425接続の確立に失敗しました。

を使用して接続します:

USER ****次に、とを使用してサーバーに正常にログインしますPASS ***。前述のように、を使用して正しいディレクトリに変更することがCWD /**/**できます。これはすべて正常に機能し、期待される応答メッセージが表示されます。

ただし、次のコードを実行すると、上記のメッセージがすべて表示されます。

私はC#.NETにかなり慣れていないので、httpWebRequestではなくこの接続方法を使用するように特に求められています。

受信しようとしているファイルは、「このメッセージを取得」のみを含むテキストファイルですが、使用すると大きくなります。どんな助けでも大歓迎です。

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

c# - C#LocalEndPointAddressFamilyポート番号を検出する

TcpClientクラスを使用してサーバーへのtcp接続を確立する場合、この接続の送信元ポートを見つける方法はありますか?execプロトコルを実装しようとしていますが、stderrポートは常に送信元ポート+1のようです。

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

c# - IP とポートからデータを受信するスレッド

指定された ip とポート番号から tcpClient を使用してデータを受信するプログラムを作成したいと思います。初めてwhile(true)を使用して実行しました。私の友人は、while ループの代わりにスレッドを使用するように私に言いました。だから私は彼の言うとおりにした。

正常に動作しますが、動作させたいほど良くはありません。プログラムを実行して「Hello world」文字列を送信すると、プログラムはそれを受信し、ジョブを終了して終了します。より多くの受信データのためにスレッドを維持したいのですが、その方法がわかりません。多分誰かが私にそれを行う方法の手がかりを持っていますか?

これを使ってデータを送信するには

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

network-programming - 802.11送信機を作成し、WiFiルーターからデータを読み取る

この質問には2つの部分があります。記事へのURLを教えたり、本を提案したりするだけでも構いません。フォーラムにすばやく回答するには、答えが少し深いかもしれません。

1)一対のワイヤーを流れるワット数を感知し、802.11を介してそれに関するデータを送信する必要があります。マイクロコントローラーが関係していると思いますが、どこから始めればいいのかわかりません。セキュリティは必要ありません。送信機に一定の間隔(たとえば、1秒あたり1フレーム)でデータをブロードキャストさせたいだけです。

2)ステップ1でブロードキャストされたデータを802.11ルーターから取得する必要があります。手順1で、任意の数の送信機に対してこれを実行できるようにしたいです。手順1の各送信機には、802.11ルーターから検索できる特別な種類のIDがありますか?ルーターで「ハンドル」を取得して、ルーターが受信しているデータを確認する方法すらわかりません。したがって、最初にルーターを取得するにはどうすればよいですか。次に、手順1で送信機から送信されたこれらの複数のデータストリームを確認するにはどうすればよいですか。

ありがとう、ジェイ

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

c# - .Net C# TcpClient / Socket HTTP クライアントのパフォーマンス / 効率

.Net TcpClient / Sockets を使用して HTTP クライアントを作成しています。

これまでのところ、クライアントは (TcpClient に GET 要求を書き込んだ後) NetworkStream 応答を反復処理し、ヘッダーを解析し、関連するメッセージ本文のバイト/チャンク バイトを取得することで、Content-Length とチャンクされた応答の両方を処理します。これを行うために、NetworkStream の ReadByte メソッドを使用します。

これはすべて正常に機能しますが、パフォーマンスはアプリケーションの重要な考慮事項であるため、できるだけ迅速かつ効率的にしたいと考えています。

最初にこれには、メッセージ本文の Read と ReadByte の交換 (Content-Length に基づく)、または適切なサイズのバッファーへのチャンクされたメッセージ本文バイトの取得、他のすべての領域 (ヘッダー、チャンク サイズなどの読み取りなど) での ReadByte の使用が含まれます。

最適なパフォーマンスを達成するためにこれを行うためのより良い/さまざまな方法についての考えを知りたいですか? 明らかに、HTTP の主な問題は、取得時に解析されない限り、応答ストリームの長さがわからないことです。

これには、より抽象的なクラス (HttpWebRequest など) を使用しない特定の理由があります (ソケット レベルでより適切に制御する必要があります)。

どうもありがとう、

クリス

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

c# - Unable to connect from remote machine

I have some kind of problem and I can't check this at home if its working or not. Here is the code

I have a simple program as well to connect to this and then send a string with data. It works fine on localhost but there is a problem when I'm trying to connect with a different coputer.

I even turned off the firewall on my PC and router, as I did on my friend's laptop. Every time I have tried to connect, his computer refused connection. Maybe I'm doing something wrong?

Of course, ipAddress is a local address now since it's only working with that at the moment. Any suggestions what to do?

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

c# - C# でのデータの送受信

以前に書いたものを少し改善しようとしています。ここで、データの受信に問題が発生しました。指定されたポートでリッスンしているプログラムに tcpClient を使用して文字列を送信するために使用するプログラムがあります。正常に動作するので、もう一度データを転送することにしました

正常に動作することもありますが、より多くの場合、それをレシーバーと呼び、送信しようとしているものを取得できません。そして、私はそれの何が悪いのか本当にわかりません。send メソッドに問題があるようです。これはレシーバー出力の例です

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

c# - C#:TCPハンドラスレッドで終了信号を処理しますか?

C# で TcpClient クラスを使用しています。

新しい tcp 接続要求があるたびに、通常はそれを処理する新しいスレッドを作成します。また、メイン スレッドがこれらのハンドラ スレッドをいつでも終了できるようにする必要があります。

これらの各ハンドラ スレッドに対する私の解決策は次のとおりです。

このポーリング アプローチの問題点は、これらのハンドラ スレッドのすべてが大量のプロセッサ リソースを占有することであり、これらのスレッドが膨大な数にある場合は特にそうです。これにより、非常に非効率になります。

これを行うより良い方法はありますか?

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

sockets - NetworkStreamクラスの使用中にクライアントのTCP切断を検出する

私の友人が問題を抱えて私に来ました。接続のサーバー側でNetworkStreamクラスを使用しているときに、クライアントが切断すると、NetworkStreamはそれを検出できません。

分解すると、彼のC#コードは次のようになりました。

クライアントが正常に接続でき、サーバーが送信されたデータを読み取ることができるという点で、コードは機能します。ただし、リモートクライアントがtcpClient.Close()を呼び出す場合、サーバーは切断を検出しません。client.Connectedはtrueのままであり、ns.DataAvailableはfalseです。

Stack Overflowを検索すると答えが得られました。Socket.Receiveが呼び出されていないため、ソケットは切断を検出していません。けっこうだ。これを回避できます。

(簡潔にするために、例外処理コードは省略しました。)

このコードは機能しますが、私はこのソリューションを「エレガント」とは呼びません。私が知っている問題に対する他の洗練された解決策は、TcpClientごとにスレッドを生成し、BinaryFormatter.Deserialize(nee NetworkStream.Read)呼び出しをブロックに許可することです。これにより、切断が正しく検出されます。ただし、これには、クライアントごとにスレッドを作成および維持するオーバーヘッドがあります。

元のコードの明快さを維持する秘密の素晴らしい答えが欠けているように感じますが、非同期読み取りを実行するために追加のスレッドを使用することは避けてください。ただし、おそらく、NetworkStreamクラスはこの種の使用法のために設計されたことはありません。誰かが光を当てることができますか?

更新: .NET FrameworkにNetworkStreamのこの使用(つまり、ポーリングブロッキングの回避)をカバーするソリューションがあるかどうかを確認することに関心があることを明確にしたいだけです-明らかにそれは可能です。NetworkStreamは、機能を提供するサポートクラスに簡単にラップできます。フレームワークでは、NetworkStream.Readでのブロックを回避するためにスレッドを使用する必要があるか、ソケット自体を覗いて切断をチェックする必要があるのは奇妙に思えました。これはバグのようです。または、機能が不足している可能性があります。;)