PrintWriterまたは他の出力ストリームを使用してサーバーとクライアントプログラム間でメッセージを送信する際に問題があります。 println( "abc")を使用して通信すると正しく動作しますが、print( "abc \ r \ n")、print( "abc \ n")またはprint( "abc \ r" )。 "改行"文字が表示されないようで、まだ "\ r"または "\ n"を待っているため、readLine()が終了しないということです。PrintWriterまたはJavaの他の出力ストリームは " r n"を知らない
クライアント:それはより明確に、私は単純に次のようにいくつかのコードを配置します
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(1234);
} catch (IOException e) {
System.err.println("Could not listen on port: 1234.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
}
System.out.println("Connected");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String textFromClient;
textFromClient = in.readLine(); // read the text from client
System.out.println(textFromClient);
String textToClient = "Recieved";
out.print(textToClient + "\r\n"); // send the response to client
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
サーバー:
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
try {
socket = new Socket("localhost", 1234);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection");
}
System.out.println("Connected");
String textToServer;
textToServer=read.readLine();
out.print(textToServer + "\r\n"); // send to server
System.out.println(in.readLine()); // read from server
out.close();
in.close();
read.close();
socket.close();
}
}
私は印刷()+ "\ rを\ n" は代わりを使用したいが私が書いているサーバプログラムは、サーバからクライアントに送られるメッセージが、最後に "\ r \ n"が含まれています。 "これはサーバーからクライアントへのメッセージです\ r \ n"。 println()はprint( "\ r \ n")と同じだと思うので、println()+ "\ r \ n"を使うべきではないと思います。 (私はサーバプログラムだけを書くように求められているので、クライアント側がサーバからどのように読み込むのかはわかりませんが、サーバプログラムをテストするためにクライアント側に書きます)。しかし、 r \ n "を読み込みますが、readLine()はそれを認識していないようです。だから私はそれで何ができますか?
私の質問を理解できない場合は、上記のコードを試してみると、私の言いたいことがわかります。あなたは、クライアントからサーバーへの書き込み後
あなたは素晴らしいです!私は本当になぜそれが動作するようになりますflush()を理解していない。私はまた、PrintWriter out =新しいPrintWriter(clientSocket.getOutputStream()、true)が見つかりました。 println()を自動でフラッシュしますが、print()は行いません。そのため、println()は期待どおりに動作しますが、print()では動作しません。ありがとうございました !! – Joey