Ho problemi nell'utilizzo di PrintWriter o di qualsiasi altro flusso di output per inviare messaggi tra il server e il programma client. Funziona correttamente se uso println ("abc") per comunicare, ma non funziona se uso print ("abc \ r \ n"), print ("abc \ n") o print ("abc \ r"). Quello che intendo per "non funziona" è che readLine() non finirà perché sembra non vedere il carattere "newline" e sta ancora aspettando "\ r" o "\ n"PrintWriter o qualsiasi altro flusso di output in Java non si conosce " r n"
Per fare più chiaro, ho semplicemente messo alcuni codici di seguito: il cliente:
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();
}
}
Server:
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();
}
}
voglio usare print() + "\ r \ n" invece di println() perché il programma server che sto scrivendo ha il requisito che il messaggio inviato dal server al client deve contenere "\ r \ n" alla fine, ad es. msgstr "questo è il messaggio dal server al client \ r \ n". Penso che println() sia lo stesso di print ("\ r \ n"), quindi non penso che dovrei usare println() + "\ r \ n", altrimenti avrà 2 newline. (Anche se non so come leggerà il lato client dal server perché mi viene chiesto di scrivere solo il programma server. Scriveranno il lato client per testare il mio programma server.) Tuttavia, dovrei inviare i messaggi contengono "\ r \ n "alla fine, ma readLine() sembra non riconoscerlo. Quindi cosa potrei fare con questo?
Se non capisci la mia domanda, puoi provare i codici di cui sopra e capirai cosa intendo.
Sei incredibile !!! Non capisco davvero perché flush() lo farà funzionare comunque. Ho anche scoperto che PrintWriter out = new PrintWriter (clientSocket.getOutputStream(), true); solo eseguire println() auto flush ma non print(). Ecco perché println() funziona come previsto ma non print(). Grazie !! – Joey