[英]basic Socket programming in Java
I am attempting to create a very simple Socket
/ ServerSocket
program in Java.我正在尝试用 Java 创建一个非常简单的Socket
/ ServerSocket
程序。 My two classes are listed below, both of which run on the same machine.下面列出了我的两个类,它们都在同一台机器上运行。 The problem is, the connection seems to be established just fine, but when I attempt to write over the socket from the client to the server, nothing seems to happen.问题是,连接似乎建立得很好,但是当我尝试将套接字从客户端写入服务器时,似乎什么也没发生。 The server never returns from in.readLine()
, and the program comes to a halt.服务器永远不会从in.readLine()
返回,并且程序会停止。 I cannot figure out why this is happening.我无法弄清楚为什么会这样。
Here are my classes:这是我的课程:
TheServer.java:服务器.java:
public class TheServer {
public static void main(String[] args) {
BufferedReader in = null;
PrintWriter out = null;
try {
ServerSocket serv = new ServerSocket(2255);
Socket sock = serv.accept();
in = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
out = new PrintWriter(sock.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Connection established by Server");
try {
String line;
while ((line = in.readLine()) != "Bye") {
System.out.println(line + "Received");
out.println(line.toUpperCase());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
TheClient.java:客户端.java:
public class theClient {
public static void main(String[] args) {
BufferedReader in = null;
PrintWriter out = null;
try {
Socket sock = new Socket("localhost", 2255);
in = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
out = new PrintWriter(sock.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Connection established by Client");
try {
while (true) {
BufferedReader read = new BufferedReader(new InputStreamReader(
System.in));
String line = read.readLine();
out.println(line.trim());
System.out.println(in.readLine().trim());
if (line == "Bye")
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
对于 PrintWriter 对象,在每次写入尝试后,
obj.flush();
You are not flushing the outputstream, do printwriter_obj.flush();
您没有刷新输出流,请执行 printwriter_obj.flush printwriter_obj.flush();
You have to do this after sending each and every message.您必须在发送每条消息后执行此操作。 I would suggest to add auto flush parameter to the Printwriter,like this:我建议将自动刷新参数添加到 Printwriter,如下所示:
PrintWriter out=new PrintWriter(OutputStream:socket.getOutputStream(),AutoFlush:true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.