問題タブ [asyncsocket]
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.
c - ソケット接続を介してデータを送信する write() 呼び出しは 1 つだけです。
最初のスタックオーバーフローの質問! 探しました...約束します。私は自分の苦境に対する答えを見つけていません。私は...控えめに言っても深刻な問題を抱えています。簡単に言うと、モバイル アプリケーション (Android アプリと iOS アプリ) がソケットを使用してサーバーと通信し、データをデータベースに送信するゲームのインフラストラクチャを開発しています。バックエンド サーバー スクリプト (私は BES またはバック エンド サーバーと呼んでいます) は、数千行のコードです。基本的に、ソケットへの着信接続を受け入れてフォークする main メソッドと、ソケットから入力を読み取り、それをどう処理するかを決定するメソッドがあります。ほとんどのコードは、データベースとの間でデータを送受信し、それをモバイル アプリに送り返すメソッドにあります。私が追加した最新の方法を除いて、それらはすべて正常に機能します。このメソッドは、データベースから大量のデータを取得し、JSON オブジェクトとしてエンコードしてモバイル アプリに送り返します。モバイル アプリは、JSON オブジェクトからデータをデコードし、必要な処理を行います。私の問題は、このデータが非常に大きく、ほとんどの場合、1 回のデータ書き込みでソケットを通過できないことです。したがって、受信しようとしている JSON オブジェクトのサイズをアプリに通知する 1 つのデータ書き込みをソケットに追加しました。ただし、この書き込みが発生した後、次の書き込みで空のデータがモバイル アプリに送信されます。受信しようとしている JSON オブジェクトのサイズをアプリに通知する 1 つのデータ書き込みをソケットに追加しました。ただし、この書き込みが発生した後、次の書き込みで空のデータがモバイル アプリに送信されます。受信しようとしている JSON オブジェクトのサイズをアプリに通知する 1 つのデータ書き込みをソケットに追加しました。ただし、この書き込みが発生した後、次の書き込みで空のデータがモバイル アプリに送信されます。
奇妙なことに、JSON オブジェクトのサイズを送信するこの最初の書き込みを削除すると、JSON オブジェクトの実際の送信は正常に機能します。それは非常に信頼性が低く、一度の読み取りですべてが送信されることを願っています. 状況にさらに奇妙な点を加えると、2 回目の書き込みで送信されるデータのサイズを膨大な数にすると、iOS アプリはそれを適切に読み取りますが、それ以外の場合は空の配列の真ん中にデータが格納されます。
世界で何が起こっているのですか?どんな洞察も大歓迎です!以下は、サーバー側での 2 つの書き込みコマンドの基本的な抜粋です。
このスクリプトの他のどこでも読み取りと書き込みは正常に機能することに注意してください。ただし、2 つの書き込み操作を続けて行うのはこの場所だけです。
サーバー スクリプトは、バークレー ソケットを使用するネイティブ C の Ubuntu サーバー上にあり、iOS は AsyncSocket というラッパー クラスを使用しています。
モバイル アプリは 2 つの読み取り呼び出しを行い、outputMessage
問題なく動作しますが、非常に大きな数returnData
に上書きしない限り、常に空のデータの集まりにすぎませんsizeof(returnData)
。その場合、iOS は空のデータの途中でデータを受信します。オブジェクト (正確には NSData オブジェクト)。AsyncSocket クラスの iOS 側で使用するメソッドは、最初の書き込み呼び出しから受け取った長さまでデータを読み取ることに注意することも重要です。したがって、たとえば 10000 バイトを読み取るように指示すると、そのサイズの NSData オブジェクトが作成され、ソケットから読み取るときにバッファーとして使用されます。
どんな助けでも大歓迎です。よろしくお願いします!
c# - .NETCF Async TCP socket graceful shutdown issue
I have a TCP client/server app to communicate with a Windows CE device over an ActiveSync connection. Both the client and server utilize Asynchronous sockets (i.e. the Socket.Begin*
and Socket.End*
functions). When both the client and server are running on my desktop everything functions exactly as expected, but when the client is running on the Windows CE device that's connected over ActiveSync, I always get a SocketException
on the ReceiveCallback after calling Socket.Shutdown
(when the device is initiating the disconnect). The full exception is:
Everything also seems to work correctly if the server (running on the desktop) initiates the disconnect. I have a couple ideas on how to avoid this, including disallowing device initiated disconnects and ignoring all exceptions after initiating a disconnect. However, I'd like to know why this is happening and if there's a better way of handling it.
The Disconnect and ReceiveCallbacks (operationally identical on both the server and client) are:
java - AsyncSocket は Java Socket サーバーに接続できますが、データを書き込むことはできません
upLoad を呼び出すたびに、Java コンソールは受け入れますが、データは転送されますか?
writedata 呼び出しを didConnectToHost に変更したところ、クライアントはデータが転送されたと言っていますが、これらのデータを Java Server コンソールに表示するにはどうすればよいですか?
これは私のJavaサーバーコードです:
これは私のiPhoneクライアントコードです:
iphone - AsyncSocket デリゲート メソッドが正しく呼び出されませんか?
AsyncSocket クラスを使用して、iPhone から Mac にローカル ネットワーク経由でかなり大きな画像を転送しています。ヘッダーでは、didReadData デリゲート メソッドが次のように宣言されています。
ソケットがデータの読み取りを完了すると、このメソッドが呼び出されることが示されています。ただし、このメソッドは何度も呼び出され、そのたびにデータ長が増加します。ダウンロードがいつ終了したかを知るにはどうすればよいですか? 最初の数バイトでデータの長さを送信するつもりですか?
java - JavaのAsyncSocket?
Java(特にAndroid)でAsyncSocketを実装するにはどうすればよいですか?
iphone - ios + アプリデリゲートから asynudpsocket を使用
AsynUDPSocket クラスを使用して簡単なアプリを作成しました。UDP クライアントからの単純なテキスト メッセージをリッスンします。
関連するコードをView Controllerに入れると、すべて正常に動作します。しかし、アプリデリゲートで同じことを試みると、アプリがクラッシュします。このことは、数日前にアプリのデリゲートでうまく機能しました。今、私は何が悪いのかわかりません。
この投稿のコードを使用しました 。誰か詳しく教えてください。
編集:コード
My App Delegate の .h ファイルの内容
My App Delegate の .m ファイルの内容
編集:クラッシュログ
ありがとう、アンジェロ。
c# - C#非同期ソケットのピークに相当しますか?
私は同期ソケットの使用に慣れています。まだ完全に到着していないメッセージを処理するために、最初の 4 バイトをメッセージの予想される長さに設定します。次にSocket.Receive(tcpRecv, 1024, SocketFlags.Peek);
、メッセージをバッファから引き出すことなく、メッセージを確認するために使用します。すべてがそこにあれば、データを引き出します。そうでなければ、そこに置いておきます。メッセージが 1024 バイトを超えないようにプロトコルを設計しました。
非同期ソケットでは、データを覗く方法がわかりません。これを行う方法はありますか?データをのぞくよりも、これに対するより良いアプローチはありますか?
ありがとう。
-ニック
silverlight - connectasync呼び出しにブレークポイントを設定しない限り、Silverlighttcpソケットが2回目にコールバックすることはありません
接続を試みるメソッドがあります。現在、接続障害をテストしています。失敗した場合、ユーザーには再試行ボタンが表示されます。押すと、m_tcpSocket.ConnectAsync(m_connectArgs); が再度呼び出されますが、コールバックを取得することはありません。
ただし、ConnectAsync呼び出しにブレークポイントを設定すると、コールバックが発生します。
Visual Studioでブレークポイントに到達したときに自動的に実行される、明示的に実行する必要のあるクリーンアップはありますか?
ありがとうございました。
-ニック
objective-c - NSNetService を使用してサーバーに接続していますが、失敗しています - 自動ソケット切断?
問題の新しい単純なバージョン:
Objective-C クライアントを使用して Bonjour デバイスに接続して通信しようとしていますが、サービス (サーバー) を解決できません。もともと、もっと複雑な例を実行しようとしましたが、ポート/IP を指定しても基本的なソケット接続が機能しないことがわかりました。
cocoaAsyncSocket ライブラリを使用して、可能な限り最小限のコードを作成しました。
そして、これが私が接続しようとしているサーバーです(Pythonスクリプト):
サーバーは着信接続を認識しません。クライアント側では、エラー var に値または何かがあります-私が期待するものは何もありません。助けてください?
OLD (より複雑なバージョン、同じサーバーを使用):
私のデバッグ出力は基本的に、サービスが解決されたと言っています...そして、すぐにソケットが切断されます。その間、私のサーバーはそこに座っていて、着信接続を見ていません。
最初の接続を取得してサービスの名前を出力するときにデバッガーを使用しましたが、続行を押すまでハングし、直後にソケットが切断されます???
私はObjective-Cとイベント駆動型プログラミングに非常に慣れていないので、何か間違ったことを扱っているのでしょうか? アドバイスをいただければ幸いです。
クライアント (デバッガー) 出力:
サーバー出力:
クライアント コード (ClientController.m、基本的にはhttp://www.macresearch.org/cocoa-scientists-part-xxix-messageから引用):
.net - Async Socketでタイムアウトを処理するには?
非同期ソケットを使用してクライアントにメッセージを送信し、そこからの応答を期待するコードがあります。クライアントが指定された内部で応答しなかった場合、タイムアウトと見なされます。インターネットの記事の中には、WaitOne の使用を提案しているものもありますが、これはスレッドをブロックし、I/O 完了を使用する目的を遅らせます。
非同期ソケットでタイムアウトを処理する最良の方法は何ですか?