-1
我正在用java編寫一個基本的聊天服務器,但是我遇到了一些問題。當有人創建客戶端或服務器時,我希望他們能夠輸入一個命令行參數,該參數用作所發送消息的前綴。這個參數也應該是可選的。我有一定程度的工作,出於某種原因,當我發送消息時,它會發送兩次前綴,也不是可選的。任何幫助表示讚賞,乾杯!Java ChatServer - 可選的前綴
public class ReadWriteThread extends Thread {
private BufferedReader input;
private PrintWriter output;
private String prefix;
public ReadWriteThread(InputStream input, OutputStream output, String prefix) {
this.input = new BufferedReader(new InputStreamReader(input));
this.output = new PrintWriter(output, true);
this.prefix = prefix;
}
public void run() {
try {
String line;
while ((line = input.readLine()) != null) {
output.println(prefix + " " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Server {
public static void main(String[] args) {
try {
int port = Integer.parseInt(args[0]);
System.out.println("HELLO " + args[1]);
String prefix = args[1];
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("Waiting for a client to connnect");
Socket socket = serverSocket.accept();
System.err.println("Accepted connection on port " + port);
new ReadWriteThread(System.in, socket.getOutputStream(), prefix).start();
new ReadWriteThread(socket.getInputStream(), System.out, prefix).start();
} catch (Exception e) {
e.printStackTrace();
System.err.println("\nUsage: java Server <port>");
}
}
}
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
int port = Integer.parseInt(args[0]);
String prefix = args[2];
socket = new Socket(args[1], port);
System.err.println("Connected to " + args[1] + " on port " + port);
new ReadWriteThread(System.in, socket.getOutputStream(), prefix).start();
new ReadWriteThread(socket.getInputStream(), System.out, prefix).start();
} catch (Exception e) {
e.printStackTrace();
System.err.println("\nUsage: java Client <port>");
}
}
}
開始由進入
java Client 7777 localhost
進入
java Server 7777 OPTIONALPREFIX
啓動客戶端的服務器
服務器上
Waiting for a client to connnect
Accepted connection on port 7777
-->-->hello
-->-->whats up
在客戶端,行「new ReadWriteThread(System.in,socket.getOutputStream(),prefix).start();」將發送文本+前綴到服務器。在服務器端,行「new ReadWriteThread(socket.getInputStream(),System.out,prefix).start();」將顯示從客戶端接收的文本(以及前綴),並添加前綴=>,因此在這裏,您有兩次preifx – Tuco