Java 通过套接字同时发送和接收数据
我正在开发一个小游戏,它在客户端和服务器之间发送位置数据,以了解套接字是如何工作的 服务器可以发送和接收数据,客户机也可以发送数据,但当客户机尝试从服务器读入数据时,程序挂起。(本部分已注释掉) 服务器代码:Java 通过套接字同时发送和接收数据,java,sockets,tcp,Java,Sockets,Tcp,我正在开发一个小游戏,它在客户端和服务器之间发送位置数据,以了解套接字是如何工作的 服务器可以发送和接收数据,客户机也可以发送数据,但当客户机尝试从服务器读入数据时,程序挂起。(本部分已注释掉) 服务器代码: public void run() { try { serverSocket = new ServerSocket(10007); } catch (IOException e) { System.err.println("Could no
public void run() {
try {
serverSocket = new ServerSocket(10007);
} catch (IOException e) {
System.err.println("Could not listen on port: 10007.");
System.exit(1);
}
try {
System.out.println("Waiting for connection...");
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
System.out.println("Connection successful");
System.out.println("Waiting for input.....");
while (true) {
try {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter(clientSocket.getOutputStream(), true);
if (in.readLine() != "0" && in.readLine() != null) {
setXY(in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
out.println("X" + Graphics.charX);
out.println("Y" + Graphics.charY);
}
客户端代码:
public void run() {
try {
System.out.println("Attemping to connect to host " + serverHostname + " on port " + serverPort + ".");
echoSocket = new Socket(serverHostname, serverPort);
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + serverHostname);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for " + "the connection to: " + serverHostname);
System.exit(1);
}
while (true) {
try {
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
out = new PrintWriter(echoSocket.getOutputStream(), true);
/*if (in.readLine() != "0" && in.readLine() != null) {
setXY(in.readLine());
}*/
} catch (IOException e2) {
e2.printStackTrace();
}
out.println("X" + Graphics.charX);
out.println("Y" + Graphics.charY);
}
}
非常感谢您的帮助 您需要两个线程来同时读/写阻塞套接字(这正是您要做的)。在.readLine()中调用
时,当前线程将阻塞,直到它接收到一行数据。您在这里执行线程处理吗?是的,此类是一个线程。嗯,您的线程处理不正确,一点也不正确,您需要研究如何使用线程执行此操作。这类问题已经被问了很多次了,所以做一些搜索吧——如果你这样做了,你会得到回报的。谢谢。穿线绝对是个问题。我写它是为了把它分成两个线程:读和写。问题是线程在调用.readLine()时挂起,因此需要将其拆分为两个线程。