問題タブ [stream-socket-client]
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.
java - C#Windowsアプリがstreamsocketからデータを読み取り、理解できない
サーバーとクライアント間の単純な StreamSocket 通信を実現しようとしています。サーバーは Java で作成され、クライアントは C# で作成されます。
クライアントからサーバーにメッセージ (文字列) を送信することは正常に機能します。しかし、逆に困ったことがあります。
サーバーからクライアントに文字列を送信すると、すべてのメッセージがクライアントから出力されるようになります。
次のように、クライアント側で StreamSocket を初期化します。
メッセージの長さであっても、クライアントがサーバーからすべての文字列を出力することを望みます。しかし、サーバーからクライアントにメッセージを送信すると、StreamSocket のオプションを に設定しても、すべての文字列がすぐには出力されませんPartial
。
例えば:
LoadAsync()
別のサイズ (256 ではない) との異なるバージョンを試しUnconsumedBufferLength
ました。しかし、毎回同じ結果が得られます。誰が私に教えてくれますか、何が問題なのですか?
よろしくお願いします DJTrust
php - PHP SSL stream_socket_client は、作成された $context を使用しません
私は完全に失望しています。私はsslサーバーに接続しており、直接接続はうまく機能していますが、プロキシまたはsocks5を使用するためにストリームコンテキストを追加しようとすると、ソケットはそれを使用せず、とにかくこれらのssl://サーバーにかなりうまく直接接続します. 127.0.0.1 プロキシ サーバーのログを見て確認しています - 接続試行すらありませんでした。また、socks5:// http プロキシ オプションを使用して、socks5 サーバーにストリームをラップできますか?
java - 1 つのソケットからの多数の io ストリーム
I/O ストリームの各ペアが同時に異なるデータを送信できるように、サーバーのソケットとクライアントのソケットの多くの独立した I/O ストリームを並列に接続できますか?
サーバーとクライアント間のソケット数を増やさずに Java でこのような接続を実現するにはどうすればよいですか?
c# - ループで StreamSocket を使用するとメモリ リークが発生するのはなぜですか?
高速で継続的な読み取り/書き込みループを使用してネットワーク デバイスと通信する C#、UWP 10 ソリューションを開発しています。API によって提供される StreamSocket はうまく機能しているように見えましたが、メモリ リークが発生していることに気付きましたTask<uint32>
。1 分間に数百単位のメモリ リークがヒープに蓄積されています。
内で単純な古いwhile (true)
ループを使用するか、TPL Dataflow でasync Task
自己投稿を使用するかに関係なく (この回答ActionBlock<T>
に従って)、結果は同じです。
ソケットからの読み取りをなくして書き込みに集中すれば、問題をさらに切り分けることができます。DataWriter.StoreAsync
アプローチを使用するか、より直接的なを使用するかに関係なくStreamSocket.OutputStream.WriteAsync(IBuffer buffer)
、問題は残ります。さらに、.AsTask()
これらに を追加しても違いはありません。
ガベージ コレクタが実行されても、これらTask<uint32>
の はヒープから削除されません。これらのタスクはすべて完了しており ( RanToCompletion
)、エラーや、「再利用の準備が整っていない」ことを示すその他のプロパティ値はありません。
このページに私の問題のヒントがあるようです(バイト配列が管理された世界から管理されていない世界に移動すると、メモリの解放が妨げられます)、規定された解決策は非常に厳しいようです: これを回避する唯一の方法は、すべての通信ロジックをC++/CX。これが真実ではないことを願っています。確かに、他の C# 開発者は、メモリ リークのない継続的な高速ネットワーク通信を成功裏に実現しています。確かに Microsoft は、C++/CX でメモリ リークなしでのみ機能する API をリリースしないでしょう。
編集
リクエストに応じて、いくつかのサンプル コード。私自身のコードにはレイヤーが多すぎますが、この Microsoft サンプルでは、はるかに単純な例を見ることができます。問題を強調するために、ループで 1000 回送信するように簡単な変更を加えました。これは関連するコードです:
Task<UInt32>
アプリを起動してソケットを接続すると、ヒープ上に のインスタンスしかありません。「SendHello」ボタンをクリックすると、86 個のインスタンスがあります。2回目押したら129回。
編集#2 アプリ(タイトループの送受信を使用)を3時間実行した後、間違いなく問題があることがわかります.50万個のタスクインスタンスがGCされず、アプリのプロセスメモリが初期から上昇しました46MB~105MB。明らかに、このアプリは無期限に実行できません。 ただし...これはデバッグモードでの実行にのみ適用されます。アプリをリリースモードでコンパイルし、展開して実行すると、メモリの問題は発生しません。一晩中実行したままにできますが、メモリが適切に管理されていることは明らかです。ケースを閉じました。
c# - リソースのバインド後に StremSocket を使用する C# XMPP がハングする
UWP アプリ用に C# で XMPP クライアントをビルドする必要があります。
いくつかのライブラリ .NET があることは知っていますが、うまく機能しないようです (無料のもの)。そのため、独自に実装することにしました。
サーバー側は ejabberd サービスです。
私はこの方法で StreamSocket を使用します (ref XMPP 3920bis ):
最初のプレゼンスを送信し、サーバーが応答せず、接続が閉じられるまで、すべてが正常に機能します。
何か案は?