完全に透過的であるように、これは割り当て用です。ソケットのバッファ付きリーダーは決して準備ができていません
ありやるべきことがあるが、現時点では、私はちょうど次を取得しようとしている:
- ノードAはノードAがテキストファイル(マイナス最初に送信し
- テキストファイルから読み込みますノードBは、ソケットは、前記今、情報が送信されていないのいずれかと思われる。しかし、コンソールに
それをプリントアウト、またはから読み込まソケット
ことで、私はこのようなノードを設定します。
//Open a socket for talking with NodeB
Socket mySocket = new Socket(InetAddress.getLocalHost(), portNum);
//Set up the socket's output
PrintWriter out = new PrintWriter(mySocket.getOutputStream(), true);
//Loop through the lines of the confA file, writing them to the socket
String line = bufferedReader.readLine();
while (line != null)
{
//Write the line to the socket, get the next line
out.println(line); //updated to println, this flushes and fixes another problem
out.flush();
line = bufferedReader.readLine();
}
//Close the socket
mySocket.close();
注ノードAのループ作品その:ノードAで
NodeA nodeA = new NodeA();
NodeB nodeB = new NodeB();
new Thread(nodeA).start();
new Thread(nodeB).start();
、私はこれを行います良い。私はprintステートメントでテストしたとき、それは永遠にループせず、意図されたテキスト行を通しません。
その後、ノードBの終わりに:現在のノードBコードin.readyしかし
//Open the socket
ServerSocket mySocket = new ServerSocket(portNum);
Socket connectionSocket = mySocket.accept();
//Set up a reader on the socket to get what's coming from it
BufferedReader in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
String line = in.readLine(); //hang occurs here
while(line != null) {
System.out.println(line);
line = in.readLine();;
}
に、表示するように更新()は決して真です。 whileループを使用してそれが起こるのを待ってみましたが、決して発生しません。
私は本当に理由は分かりません。私は正しくソケットをセットアップするかどうか、私が正しく聞いていれば、私は正しくサーバーを設定するか分かりません。
私はちょうどAを聞いているサーバーにBを作ることが最も理にかなった。それが正しいと思います。それは私がSOのいくつかの他の例を見たものに似ています。
ありがとうございました。私はソケット、ポート、聞いたりそうでなければ、私はあなたの提案を最初に理解していない場合は私を許して非常に慣れていない。私は私が行くようにそれを理解するために全力を尽くします。
問題がどこにあるのかわかりやすくするために、コード全体を追加することを控えましたが、もっと情報が必要な場合はお気軽にお問い合わせください。
1) 'ServerSocket.accept()'が返されるたびに、サーバとクライアントの間に接続されたソケットが確立されます。接続に関しては、 'ServerSocket.accept()'をもう一度呼び出さない*。 2)クライアントでは、PrintWriterはデータを内部的にバッファリングします。 'out.print(line);を呼び出した結果をネットワーク上ですぐに見たい場合は、次の文として' out.flush() 'を呼び出さなければなりません。 –
'ready()'は、次の読み取りがすぐに戻るかどうかを返します。 [ドキュメント](https://docs.oracle.com/javase/9/docs/api/java/io/Reader.html#ready--)を参照してください。 – VGR