使用Java提供的Socket,建立服务器和客户端,编写程序,实现两者能够相互发信息交流。
时间: 2024-04-09 08:27:38 浏览: 9
以下是使用Java Socket建立服务器和客户端,实现双向通信的示例代码:
服务器端代码:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,指定端口号
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("等待客户端连接...");
// 监听客户端的连接请求
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接!");
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// 创建一个线程用于接收客户端消息
Thread receiveThread = new Thread(() -> {
String clientMessage;
try {
while ((clientMessage = in.readLine()) != null) {
System.out.println("客户端消息:" + clientMessage);
}
} catch (IOException e) {
e.printStackTrace();
}
});
receiveThread.start();
// 主线程用于向客户端发送消息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String message;
while ((message = br.readLine()) != null) {
out.println(message);
}
// 关闭连接
in.close();
out.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
客户端代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象,指定服务器IP地址和端口号
Socket socket = new Socket("localhost", 8888);
// 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 创建一个线程用于接收服务器消息
Thread receiveThread = new Thread(() -> {
String serverMessage;
try {
while ((serverMessage = in.readLine()) != null) {
System.out.println("服务器消息:" + serverMessage);
}
} catch (IOException e) {
e.printStackTrace();
}
});
receiveThread.start();
// 主线程用于向服务器发送消息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String message;
while ((message = br.readLine()) != null) {
out.println(message);
}
// 关闭连接
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码中,服务器端和客户端分别使用两个线程,一个用于接收消息,一个用于发送消息。启动服务器端后,它会等待客户端的连接请求,并创建一个用于接收客户端消息的线程。主线程用于从控制台读取用户输入的消息,并发送给客户端。启动客户端后,它会连接到服务器,并创建一个用于接收服务器消息的线程。主线程用于从控制台读取用户输入的消息,并发送给服务器。
这样,服务器和客户端就可以通过Socket实现双向通信了。