[英]How can i get the reply from server TCP in java
My code just do a simple task send a text from client's console to server and receive a reply. 我的代码只是执行一个简单的任务,即从客户端控制台向服务器发送文本并接收回复。 But my code doesn't work though.
但是我的代码却无法正常工作。 I keep sending text to server and no reply sending back.
我一直在向服务器发送文本,而没有回复发回。 I have done a several example that plus 2 number given from client.
我已经做了几个例子,再加上客户提供的2个数字。 I do this the same way but i can't figure out what is the problem.
我以同样的方式这样做,但我不知道是什么问题。
Server: 服务器:
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8);
Socket client = server.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter outToClient = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
String in = inFromClient.readLine(),out;
while(in!=null){
out = in+" from server";
outToClient.write(out);
outToClient.newLine();
outToClient.flush();
}
inFromClient.close();
outToClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Client: 客户:
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 8);
System.out.println("Connected to server");
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter outToServer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
Scanner input = new Scanner(System.in);
String strClient,strServer;
while(true){
System.out.print("Client: ");
strClient = input.nextLine();
outToServer.write(strClient);
strServer = inFromServer.readLine();
System.out.print("Server: ");
System.out.println(strServer);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
There are several problems with your code: 您的代码有几个问题:
Reading a line in server with: inFromClient.readLine()
使用以下命令读取服务器中的一行:
inFromClient.readLine()
Writing text without newline in client: outToServer.write(strClient);
在客户端中写没有换行符的文本:
outToServer.write(strClient);
Change this to outToServer.write(strClient + "\\n");
将其更改为
outToServer.write(strClient + "\\n");
outToServer.flush();
outToServer.flush();
after the line outToServer.write(...);
outToServer.write(...);
行之后 EDIT: To make it easier i'll post the corrected code here: (I've tried it and it works like a charm) 编辑:为了更容易,我将在此处发布更正的代码:(我已经尝试过了,它的工作原理就像一个咒语)
Client: 客户:
public class Client {
public static void main(String[] args) {
try (Socket client = new Socket("localhost", 8);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter outToServer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
Scanner input = new Scanner(System.in)) {
System.out.println("Connected to server");
String strClient,strServer;
while(true){
System.out.print("Client: ");
strClient = input.nextLine();
outToServer.write(strClient);
outToServer.newLine();
outToServer.flush();
strServer = inFromServer.readLine();
System.out.println("Server: " + strServer);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Server: 服务器:
public class Server {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(8);
Socket client = server.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter outToClient = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()))) {
String in = inFromClient.readLine(), out;
while(in != null){
out = in + " from server";
outToClient.write(out);
outToClient.newLine();
outToClient.flush();
in = inFromClient.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Please remark that this solution uses Javas ARM (Automatic resource management) for autoclosing streams and sockets. 请注意,此解决方案使用Javas ARM(自动资源管理)来自动关闭流和套接字。 So this will not work before java 1.7!
因此,这在Java 1.7之前不起作用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.