java实现一个线程在连接socket获取消息,调用另一个异步方法给socket服务端发送消息
时间: 2023-12-14 10:03:32 浏览: 32
可以采用以下的Java代码实现:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class SocketThread extends Thread {
private Socket socket;
public SocketThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
// 接收客户端消息
String message = in.readLine();
System.out.println("接收到客户端消息:" + message);
// 调用异步方法发送消息给服务端
new Thread(new Runnable() {
@Override
public void run() {
try {
// 创建连接服务端的Socket
Socket client = new Socket("localhost", 8080);
// 获取输出流
PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
// 发送消息
out.println("Hello, Server!");
out.flush();
// 关闭连接
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上述代码中,我们创建了一个 `SocketThread` 类,该类继承自 `Thread` 类,用于在连接 `Socket` 后获取客户端发送的消息,并调用异步方法发送消息给服务端。
在 `run()` 方法中,我们首先通过 `Socket` 对象获取输入流和输出流,然后接收客户端发送的消息,并打印出来。接着,我们创建了一个新的线程,用于连接服务端并发送消息。在新线程中,我们首先创建了一个连接服务端的 `Socket` 对象,然后获取输出流并发送消息。最后,我们关闭了连接。
需要注意的是,在调用异步方法时,我们需要创建一个新的线程来执行异步操作,否则可能会阻塞主线程,导致客户端无法接收到服务端的消息。