問題タブ [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.
.net - TcpClient.Receive - 切り捨てられたデータ
それは「ページ」割礼された(終わりのない)データです。「/ / 1」と「/ / 2」の間に書き込みSystem.Threading.Thread.Sleep(100)
がある場合、すべてが機能します。
c# - WM6 用の C# TCP クライアント
Windows Mobile 6 Professional で PDA 用の TCP クライアント アプリケーションを作成しようとしています。最初にラップトップで作成しようとしましたが、うまくいきました。「スマート デバイス」のコードはまったく同じですが、機能しません。
ここにコードがあります:
「readLine()」メソッド呼び出しで例外がスローされます。そうしないと、「この例外メッセージはインストールされていません。NETCFv35.messages.en.cab をインストールする必要があります」というメッセージが表示されます。その .cab は既にインストールしていますが、同じメッセージが表示されます。
何がうまくいかないのですか?このコードがラップトップ (WinForms アプリ/NET3.5) では機能し、PDA (スマート デバイス/NETCF3.5) では機能しないのはなぜですか? なにか提案を?
前もって感謝します!
c# - HTTP 応答が完了したかどうかを判断する方法
通過する特定のリクエストをログに記録する単純なプロキシの構築に取り組んでいます。プロキシは、(プロジェクトのこの時点で) 通過するトラフィックに干渉する必要がないため、プロセス中に生の要求/応答の解析をできるだけ少なくしようとしています (要求と応答はプッシュされます)。プロキシの外でログに記録されるようにキューにオフにします)。
私のサンプルは正常に動作しますが、「応答」がいつ完了したかを確実に判断できないため、接続が必要以上に長く開いたままになっています。関連するコードは次のとおりです。
私の質問は、ヘッダーを解析せずに応答が完了したことを簡単に伝える方法があるかどうかです。この応答は何でもかまいません (エンコード、暗号化、gzip など)。実際の応答をデコードして長さを取得し、ソケットを切断できるかどうかを判断する必要はありません。
c# - TCP経由でxmlデータを読み取る
tcp をリッスンして、他のデバイスからの xml データを取得するアプリケーションを開発しています。私はスニッフィング C# コードを使用しており、すべてのパケットをスニッフィングできます。私の問題は、すべてのパケットで、すべてのパケットでデータの一部を見つけることができることです。このような:
実際のデータは次のようになります。
断片ではなく、実際のデータのような文字列でデータを取得できるようにしたい。それを行うことができる.netのメソッドまたはライブラリはありますか?
c# - C# TCP 再接続クライアントの適切な実装
サーバーに再接続できるようにするTCP Client
必要があります。ネットワーク接続の品質が低いか、メンテナンスの問題が原因で、サーバーが利用できない場合があります。この分野で質の高いソリューションを探しています。
私の現在の解決策は次のとおりです。
- ConnectionState enum {Offline, Online, Connecting} で接続状態を維持する
TcpClient
クラスでクライアントを作成します。- と呼ばれる 2 つのタイマーを作成し
ConnectionCheckTimer
、ReconnectTimer
- サーバーに接続する
- リーダー スレッドと接続チェック タイマーを開始する
- 読み取りは tcpClient.GetStream() で実行され、次にこのストリームから読み取ります
- ReaderLoop クライアントの状態がオフラインに変更され、ReconnectTimer が起動されたときに例外がキャッチされた場合
ConnectionCheckTimer
lastMessageTimestamp を定期的にチェックし、間隔が maxValue より大きい場合は現在の時刻と比較します。ReconnectTimer
現在、このソリューションには満足していません。これは、TcpClient.NetworkStream でインスタンス ObjectDisposedException の例外が引き続き生成されるためです。接続、切断、データの読み取り中に発生する可能性のあるすべてのソケットの問題に対処できる、クリーンで再利用可能な Tcp 再接続クライアントの実装を探しています。
asynchronous - BeginReceive / BeginRead タイムアウト
私は NetworkStream と TcpClient を使用して、BeginRead を使用してデータを非同期に受信しています。指定した時間が経過すると読み取りが中止されるように、この操作にタイムアウトを適用する必要があります。
私が知る限り、これは NetworkStream または TcpClient ではサポートされていません - ReceiveTimeout プロパティがありますが、これは同期に相当する「読み取り」にのみ適用されるようです。
基になる Socket クラスでさえ、その BeginReceive メソッドでタイムアウトをサポートしていないようです。
この問題について検索したところ、タイムアウト期間内に操作が完了しない場合に操作をキャンセルする別のバックグラウンド スレッドをセットアップするという唯一の解決策が提案されました。これは恐ろしいハックのようです。きっともっと良い方法がありますか?
c# - もう一方の端が閉じているときにソケットが登録されない
クライアント アプリケーションが閉じられるまで、クライアントからサーバーへの接続が開いたままになるクライアント/サーバー アプリケーションで作業しています。
クライアントがデータを読み取っている間にサーバー アプリケーションが予期せずダウンした場合、クライアントはこれを例外として扱い、例外をキャッチして例外を引数としてイベントを発生させます。
このシステムが機能することをテストする必要があると思われるテストを作成しましたが、テストしているオブジェクトは、ブレークポイントを設定して続行しない限り、ソケットが閉じていることを登録していないようです。
テストの重要な部分は次のようになります。
TcpListener
オブジェクトlistener
はループバック アドレスをリッスンしています。
StreamingMonitor
は、有効になると、取得するデータの長さのリッスンを開始します。データの長さは常に、符号付き 32 ビット整数に収まると見なされます。
メッセージの長さが受信されると、このメソッドが呼び出されます。
このメソッドは、指定されたバイト数を読み取るまで、ネットワーク ストリームからデータを読み取ります。リモート接続が閉じると、ソケット例外が発生します。
ただし、単体テストは無限ループに陥り、エラーが発生するのを待ちます。これは、 のソケットがStreamingMonitor
もう一方の端が閉じられたことを認識しないためです。
SteamingMonitor
サーバーがなくなったことをどのように認識できますか?
これはループバック アドレスで可能ですか?
すべてのコードで申し訳ありませんが、メソッドを削減する方法が思いつきませんでした。
.net - system.net.tcpclient を使用して Telnet クライアントを作成する VB.NET
solaris ボックスに接続すると、これが機能しません
サーバーが返信しています
??%
誰かが私が間違っていることを知っていますか
c# - 新しいTCPクライアントを継続的に監視するにはどうすればよいですか?
新しい着信クライアントを非同期的に継続的に監視し、それらをクライアントリストに追加するTCPサーバーがあります。
ただし、このコードには2つの問題があります。
1つ目はのStartMonitoring()
呼び出しですHandleNewClient()
。これがないと、サーバーは1つの着信接続のみを受け入れ、追加の接続を無視します。私がやりたいのは、新しいクライアントを継続的に監視することですが、現在のやり方について何かが間違っています。これを行うためのより良い方法はありますか?
2番目は_isMonitoring
旗です。非同期コールバックのアクティブ化を停止し、ループを停止する他の方法がわかりません。これをどのように改善できるかについてのアドバイスはありますか?while (true)
非同期コールバックの使用に固執し、ループを含むメソッドを実行する新しいスレッドを手動で作成する必要をなくしたいと思います。
c# - TCPを介したラージオブジェクトの送信:「解析が完了する前にストリームの終わりが検出されました」
ダブルスのリストを:SerializationException
から逆シリアル化しようとすると、常に取得し続けます。NetworkStream
解析が完了する前にストリームの終わりが検出されました
私は単純なクライアントサーバーアーキテクチャを持っていますTcpTransportClient
。aの機能をラップし、 (メッセージを送信する)と(メッセージが受信されるまでブロックする)のTcpClient
2つの基本的な方法を利用します。Send
Receive
このSend
関数はを受け取り、Message
を使用してシリアル化し、BinaryFormatter
を介してバイトを送信しますNetworkStream
。
receive関数は、バイトをからバッファに読み込み、 :NetworkStream
を使用してメッセージを逆シリアル化します。BinaryFormatter
私は基本的な送信スレッドを持っています:
そして、が受け入れられるたびに開始される受信スレッドTcpClient
:
Receive
のメソッドでメッセージを逆シリアル化しようとすると常に例外が発生しますTcpTransportClient
が、データセットにデータを入れた場合にのみ問題が発生します。ネットワークを介して値のリストを送信し、受信側でそれらを正常に逆シリアル化する適切な方法は何ですか?
PSほぼ同じ質問で解決策を試しましたが、うまくいきませんでした。それでも同じ例外が発生します。