【发布时间】:2014-08-19 15:51:54
【问题描述】:
我正在尝试制作一个简单的客户端和服务器来发送和接收文本。客户端等待命令行输入,然后将其发送到服务器,服务器在System.out 上显示它。但是,尽管客户端允许我输入下一行来发送,但服务器仍然无法从套接字读取。
客户:
public class Main implements Runnable{
String [] args;
Socket socket;
PrintWriter printer;
public Main(String [] args){
this.args = args;
}
@Override
public void run() {
try {
socket = new Socket(args[0], Integer.parseInt(args[1]));
printer = new PrintWriter(socket.getOutputStream());
} catch (UnknownHostException e){
System.out.println("Unknown host.");
System.exit(2);
} catch (IOException e) {
e.printStackTrace();
}
while(true){
String textToSend = System.console().readLine();
printer.print(textToSend);
}
}
}
printer.print(textToSend); 行不通。
服务器:
public class Main implements Runnable{
String [] args;
public Main(String [] args){
this.args = args;
}
@Override
public void run() {
if (args == null){
System.out.println("Argument for port missing");
System.exit(2);
}
try {
ServerSocket listener = new ServerSocket(Integer.parseInt(args[0]));
while (true){
Socket client = listener.accept();
System.out.println("Client connected");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
try{
while(true){
String text = in.readLine();
System.out.println(text);
if (in.read() == -1){
return;
}
}
}catch (IOException e){
System.out.println("Client lost");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
欢迎任何帮助。
【问题讨论】:
-
要具体。什么“不起作用”?你有错误吗?你的堆栈跟踪实际上告诉你什么?
-
我什至没有得到任何堆栈跟踪。只是从未收到过文本。
-
你的服务器上的
run还能运行吗? -
@ScaryWombat 1. 它确实(从 main(String [] args) 摆脱
static修饰符)。 2. 它打印我在System.in中写的东西 -
套接字停止工作 - Java 现在会发生什么? :)