gpt4 book ai didi

Java ServerSocket 不会从客户端发送或接收消息

转载 作者:行者123 更新时间:2023-12-02 02:20:04 27 4
gpt4 key购买 nike

我有这两个类 Client.javaServer.java,每个类都包含一个 main 方法。想法非常简单,其中的代码也非常相似。我试图实现的目标是打开一个使用 ServerSocket 监听特定端口的服务器,然后打开客户端并连接到服务器使用Socket,以便我最终可以从客户端服务器发送消息,并反向发送消息,直到关闭连接。

到目前为止,我尝试了最简单的示例,在端口 4444上打开服务器,然后在同一台 PC上打开客户端连接到地址 127.0.0.1 (localhost),端口 4444。一切运行顺利,每次都成功建立连接,除了它不会发送任何消息,从服务器到客户端或客户端到服务器。

最后一个问题是,我应该怎么做才能在服务器和客户端之间交换消息?我应该修改什么?

客户端.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {

private static Socket client;
private static BufferedReader in, console;
private static PrintWriter out;

private static String serverAddress;
private static int port;

public static void main(String[] args) {

try {
console = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Connect to server address (example 192.168.10.11): ");
serverAddress = console.readLine();

System.out.print("Port: ");
port = Integer.parseInt(console.readLine());

System.out.println("\nTrying to connect...");
client = new Socket(serverAddress, port);

System.out.println("Connected to " + client.getRemoteSocketAddress());
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());

out.write("Connected!!!!!!");

Thread input = new Thread() {

public void run() {
String tmp;

try {
while((tmp = in.readLine()) != null) {
System.out.println("Server: " + tmp);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};

Thread output = new Thread() {

public void run() {
String tmp;

try {
while((tmp = console.readLine()) != null) {
out.print(tmp);
}
} catch(IOException e) {
e.printStackTrace();
}
}
};


input.start();
output.start();

while(true) {
if(!input.isAlive() && !output.isAlive()) {
client.close();

in.close();
console.close();
out.close();

break;
}
}

} catch (IOException e) {
e.printStackTrace();
}

}

}

服务器.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

private static ServerSocket serverSocket;
private static Socket server;
private static BufferedReader in, console;
private static PrintWriter out;

private static int port;

public static void main(String[] args) {


try {
console = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Open server on port (example 1234): ");
port = Integer.parseInt(console.readLine());

System.out.println("Server open");
serverSocket = new ServerSocket(port);

System.out.println("Waiting for a client to connect...\n");
server = serverSocket.accept();

System.out.println("Client " + server.getRemoteSocketAddress() + " connected!");
in = new BufferedReader(new InputStreamReader(server.getInputStream()));
out = new PrintWriter(server.getOutputStream(), true);

Thread input = new Thread() {

public void run() {
String tmp;

try {
while((tmp = in.readLine()) != null) {
System.out.println("Client: " + tmp);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};

Thread output = new Thread() {

public void run() {
String tmp;

try {
while((tmp = console.readLine()) != null) {
out.print(tmp);
}
} catch(IOException e) {
e.printStackTrace();
}
}
};

input.start();
output.start();

while(true) {
if(!input.isAlive() && !output.isAlive()) {
serverSocket.close();
server.close();

in.close();
console.close();
out.close();

break;
}
}

} catch (IOException e1) {
e1.printStackTrace();
}

}

}

最佳答案

你正在读台词,但你没有拧台词。您应该使用 out.println(),而不是 out.write()out.print()

关于Java ServerSocket 不会从客户端发送或接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com