2017-11-22 13 views
-1

私はこの問題を見つけることができるすべてのソリューションを試しました。ObjectInputStreamコンストラクタがハングするプログラム

server = new ServerSocket(9421); 
client = new Socket("localhost", 9421); 
out = new ObjectOutputStream(client.getOutputStream()); 
out.flush(); 
System.out.println("Starting input streams"); 
in = new ObjectInputStream(client.getInputStream()); 
System.out.println("input streams are now running"); 

ObjectInputStreamの前にobjectInputStreamを宣言する必要があります。他の場所では、Object出力ストリームをフラッシュするように指示します。このコードはプログラムをハングするだけで、いわゆるヘッダーを待っています。

+0

あなたが投稿したことは、直近の問題から戻って、[Javaでのソケットプログラミングに関するチュートリアル](https://docs.oracle.com/javase/tutorial/networking/sockets/)を調べる必要があることを示しています。 index.html)。これから作業コードに至るまでは、StackOverflowでは広すぎます。 –

答えて

2

ObjectInputStreamの前にobjectInputStreamを宣言する必要があります。

ありませんそれは、それはObjectInputStreamObjectOutputStreamを構築するためにあなたに伝えていない、とあなたはそれをやっています。

他の場所では、オブジェクト入力ストリームをフラッシュするように指示します。

いいえ、彼らはObjectOutputStreamをフラッシュするように指示しています。あなたもそうしています。

正確に読んでください。

このコードはプログラムをハングし、いわゆるヘッダーを待っています。

これは100%正確です。それについて「いわゆる」ものは何もない。そして何もと書かれています。ピアはまだObjectOutputStreamを構築していません。このコードは、接続が切断されるか、ネットワークが切断されるまでブロックされます。

実際、ピアは接続を受け入れていません。このコードをすべて同じスレッドで実行することはできません。 ServerSocketは、別個の受け入れループスレッドを必要とし、そのスレッドは、オブジェクトストリームを同じ順序で構築する受け入れられたソケットごとに、別のスレッドを開始する必要があります。

関連する問題