問題タブ [objectinputstream]
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 - ソケット通信のプロセス中に ObjectInputStream.readObject() が永久にハングする
Linux システムでソケット通信の問題が発生しました。通信プロセスは次のようになります。クライアントはメッセージを送信してサーバーに計算タスクを実行するように依頼し、タスクの完了後にサーバーからの結果メッセージを待ちます。
ただし、サーバー側からはクライアントに応答するために結果メッセージがソケットに書き込まれていても、タスクに約 40 分かかる場合、クライアントは結果メッセージを待つためにハングアップします。 1 分など、タスクにほとんど時間がかからない場合は、結果メッセージを受け取ります。また、この問題はお客様の環境でのみ発生し、通信プロセスはテスト環境で正常に動作します。
この問題の原因は、ソケットのデフォルトのタイムアウト値がお客様の環境とテスト環境で異なるためではないかと推測していますが、以下の値はこれら 2 つの環境、およびクライアントとサーバーの両方で同じです。
クライアントのコードは次のようになります。
サーバー上のコードは次のようになります。
この問題を解決するために、フラッシュとリセットの方法を追加しましたが、問題はまだ存在します:
この問題を解決するために私が次に何をすべきかを知っている人はいますか。原因は環境設定だと思いますが、どのような環境要因がソケット通信に影響を与えるのかわかりませんか?
また、Tcp/Ip プロトコルを使用して通信するソケットの問題は、長時間のタスクに関連しているため、tcp に関するどの値がソケット通信のタイムアウトに影響しますか?
ログについて分析したところ、メッセージがソケットに書き込まれた後に例外がスロー/キャッチされていないことがわかりました。ただし、常に 15 分後に、クライアントからの要求を受け入れるために使用されるサーバー側の objectInputStream.readObject() コード スニペットに例外があります。ただし、socket.getSoTimeout の値が 0 であるため、タイムアウト例外がスローされたのは非常に奇妙です。
では、なぜ Connection Timed out 例外がスローされるのでしょうか?
sockets - 原因: java.net.SocketException: 接続がタイムアウトしました。SocketTimeoutException ではありません
この SocketException は ObjectInputStream.readObject() メソッドでスローされますが、この例外の原因は何ですか? また、クライアントとサーバーのソケットの soTimeout の値は両方とも 0 で、KeepAlive の値は false です。
setSoTimeout メソッドに関する JAVA API ドキュメントから、このメソッドがゼロ以外の値に設定されている場合、時間切れになると、SocketException:Connection タイムアウトではなく SocketTimeoutException のみがスローされるため、この例外は setSotimeoutMethod とは関係ありません。 .
しかし、PlainSocketImpl(ここではSSLSocketImpl).getTimeout()で返された値をsetSoTimeout()メソッドで転送するという、やはりかなり変なメソッドです。
java - Map オブジェクトを別の Map 内に格納する
たとえば、次のマップがあります。
私がいくつかの値を入れるよりも:
このオブジェクトをシリアル化するためのこのクラスがあるよりも:
}
これを行うのは、ソケットを使用していて、ObjectInputStream と ObjectOutputStream を使用してマップ オブジェクトをクライアントからサーバーに渡したいからです。
ここで質問したいのは、たとえば、この Map オブジェクトをサーバーに保存できるかどうかです。
このオブジェクトを別のマップに格納することはできますか?
よろしく
android - Bluetooth android経由で転送画像を転送できません
連絡先情報と写真を共有するAndroidでアプリケーションを開発しています。情報全体を含むクラスのものがあります。
これは、ソケット経由で画像を転送するスレッドです
現在、画像は2番目のデバイスに転送されず、データでさえも問題が発生しています。問題はどこだ 。
android - Android ObjectInputStream(openFileInput) は常に IOException をスローします
内部ストレージ (ファイル) から読み込もうとしていますが、問題があります。
FileInputStream
を使用してファイルの を取得しますFileInputStream fis = context.openFileInput(filename)
。呼び出しは成功し、何も失敗しません。次にObjectInputStream
、次の行を使用してオブジェクトを作成してみます: ObjectInputStream ois = new ObjectInputStream(fis)
.
これは毎回スローされますIOException
!! 私は何を間違っていますか?
fis
asFileInputStream
と asInputStream
オブジェクトを使ってみました。を使用してファイルに書き込むことができますObjectOutputStream
。
java - ObjectInputStream-新しいデータを待つ方法は?
作成しているクライアントサーバーアプリがあり、サーバー上のオブジェクトを読み取るときに少し問題が発生します。
サーバーがクライアントソケットに接続した後、オブジェクトの入力ストリームと出力ストリームを作成し、それらをservice()
メソッドに渡します。そこでは、クライアントからのさまざまな種類のメッセージを処理することになっています。クライアント(つまり、Message
私のデザインのオブジェクト)からメッセージをうまく受け取ることができます。しかしもちろん、私がやりたいのは、メッセージを取得して処理し、応答できるようにループを作成することです。
これまでのところ、私のコードは1つのメッセージに対してのみ機能します。ループを追加すると、すべての反復で何が起こったのか、クライアントがソケットを介して新しいメッセージを送信する機会を得る前に、サーバーは同じメッセージを何度も読み続けました(少なくともこれが起こっていると思います) 。
したがって、私が本当に行う必要があるのは、service()
メソッドに新しい入力を待機させる方法を理解することです。何か案は?それとも私はこれに間違って近づいていますか?反復ごとに新しいOISを作成する必要がありますか...?いくつかのコード:
java - ソケットを介して匿名クラスを送信しますか?(JavaのObject..Stream)
だから今、私はとで実行されているサーバーを持っていObjectInputStream
ますObjectOutputStream
。
私が抱えている問題はjava.lang.Date
、クライアントに送信してからコンパイルしようとしている拡張のカスタム(匿名)クラスがあることです。
したがって、クライアント側でクラスを定義する場所はありませんが、プログラムでクラスをコンパイルしたいと思います。ClassNotFoundException
私はさまざまなメソッドを試しましたが、クラスが最初はクライアント側にないため、取得するたびに。
java - StrictMode は、InputStream が閉じられていないと不平を言う
AndroidのStrictModeによって次の違反が報告されています。
02-05 04:07:41.190: ERROR/StrictMode(15093): 添付のスタック トレースでリソースが取得されましたが、解放されませんでした。リソース リークを回避する方法については、java.io.Closeable を参照してください。02-05 04:07:41.190: エラー/StrictMode(15093): java.lang.Throwable: 明示的な終了メソッド 'close' が呼び出されていません
ストリームを適切に閉じていないことに不満を抱いています。ただし、in
下層のストリームを閉じてはいけませんか? フラグが立てられたエラーの理由は何ですか?
java - ObjectInputStreamはMySqlで機能しますが、sqliteでは機能しません
このコードを使用してMySqlデータベースからBlobを取得しますが、正常に機能します。sqliteデータベースに使用すると、StreamCorruptedExceptionがスローされます。
SqLiteデータベースを使用する場合:
java.io.StreamCorruptedException:無効なストリームヘッダー:java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)の61742E75 java.io.ObjectInputStream。(ObjectInputStream.java:294)
なぜ異なる振る舞いがあるのですか?
ここで私がデータベースに書き込む方法:
追加情報sqliteドライバーのバージョン: