【发布时间】:2016-04-13 20:06:23
【问题描述】:
我正在尝试编写一个回显客户端服务器,但我没有得到服务器的任何响应。不知道我的错误在哪里。 我在网上看到过一些例子。有些人只使用 InputStream/OutputStream,但我决定使用 BufferedReader 和 PrintWriter - 这有什么大区别吗?
服务器端:
public class Server {
public static void main(String[] args){
Server server = new Server();
server.runServer(Integer.parseInt(args[0]));
}
private void runServer(final int port){
ServerSocket serversckt = null;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try{
serversckt = new ServerSocket(port);
socket = serversckt.accept();
System.out.println("Request from client accepted!");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
String str;
while((str = in.readLine()) != null){
System.out.println(str);
out.println(str);
out.flush();
}
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
客户端:
public class Client{
public static void main(String[] args){
Client client = new Client();
client.runClient(Integer.parseInt(args[0]), args[1]);
}
private void runClient(final int port, final String hostname){
Socket sckt = null;
try{
sckt = new Socket(hostname, port);
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(sckt.getInputStream()));
PrintWriter out = new PrintWriter(sckt.getOutputStream(), true);
String str;
while((str = stdIn.readLine()) != null){
out.println(str);
System.out.println(in.readLine());
}
} catch(IOException e){
System.out.println(e.getMessage());
}
}
谢谢!
【问题讨论】:
-
我不认为服务器中的
while((str = in.readLine()) != null)是阻塞调用,所以在第一次读取时它将是null,然后它将终止服务器。也许其他人对BufferedReader以及它是否在那里阻塞有更多的了解。 -
你真的可以调用不回显echo服务器的回显服务器吗?
-
@thatotherguy 这很可能是重点:从控制台读取,将其发送到服务器并读取其“回声”。 @OP
System.out.println(in.readLine());也可能不会阻塞,因此它会显示“无”,因为服务器处于离线状态(阅读我的第一条评论)或没有时间回答。
标签: java sockets server client echo