Java Socket套接字如何实现数据传输
在Java中,使用Socket套接字进行数据传输主要涉及到两个类:java.net.Socket
(用于客户端)和java.net.ServerSocket
(用于服务器端)。以下是使用这两个类实现数据传输的基本步骤:
服务器端
-
创建ServerSocket对象:
ServerSocket serverSocket = new ServerSocket(port);
其中
port
是服务器监听的端口号。 -
接受客户端连接:
Socket clientSocket = serverSocket.accept();
这行代码会阻塞,直到有客户端连接到服务器。
-
获取输入输出流:
InputStream input = clientSocket.getInputStream(); OutputStream output = clientSocket.getOutputStream();
-
读取和写入数据:
// 读取客户端发送的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String receivedData = reader.readLine(); // 向客户端发送数据 PrintWriter writer = new PrintWriter(output, true); writer.println("Hello, Client!");
-
关闭资源:
reader.close(); writer.close(); clientSocket.close(); serverSocket.close();
客户端
-
创建Socket对象:
Socket socket = new Socket(serverAddress, port);
其中
serverAddress
是服务器的IP地址或主机名,port
是服务器监听的端口号。 -
获取输入输出流:
InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream();
-
读取和写入数据:
// 向服务器发送数据 PrintWriter writer = new PrintWriter(output, true); writer.println("Hello, Server!"); // 读取服务器发送的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String receivedData = reader.readLine(); System.out.println(receivedData);
-
关闭资源:
reader.close(); writer.close(); socket.close();
示例代码
服务器端代码
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
int port = 12345;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
try (Socket clientSocket = serverSocket.accept()) {
System.out.println("New client connected");
InputStream input = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
OutputStream output = clientSocket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
String receivedData = reader.readLine();
System.out.println("Received from client: " + receivedData);
writer.println("Hello, Client!");
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
String serverAddress = "localhost";
int port = 12345;
try (Socket socket = new Socket(serverAddress, port)) {
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
writer.println("Hello, Server!");
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String receivedData = reader.readLine();
System.out.println("Received from server: " + receivedData);
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + serverAddress);
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过上述步骤和示例代码,你可以在Java中使用Socket套接字实现基本的数据传输。