3.方法类目标:通过案例驱动法和实验法,Socket、ServerSocket的基本使用方法。
时间: 2024-02-03 12:15:48 浏览: 28
Socket和ServerSocket是Java中用于网络编程的重要类,它们可以实现客户端和服务器之间的通信。下面通过案例驱动法和实验法介绍它们的基本使用方法。
1. Socket类的基本使用方法
Socket类代表了客户端与服务器建立连接后的套接字,使用Socket类可以实现客户端与服务器之间的通信。下面是一个简单的Socket通信的示例:
客户端代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
socket.close();
}
}
```
服务器端代码:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
```
在以上代码中,客户端通过Socket类建立连接,通过输出流将用户输入的数据发送给服务器端,服务器端接收到数据后再通过输出流将数据返回给客户端。通过输入流和输出流的不断交替,实现了客户端和服务器之间的通信。
2. ServerSocket类的基本使用方法
ServerSocket类是服务器端监听指定端口的套接字,它等待客户端的连接请求,并创建一个新的Socket实例与客户端通信。下面是一个简单的ServerSocket通信的示例:
服务器端代码:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接,客户端地址:" + clientSocket.getInetAddress().getHostAddress());
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
out.close();
in.close();
clientSocket.close();
}
}
}
```
客户端代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
socket.close();
}
}
```
在以上代码中,服务器端通过ServerSocket类监听指定端口,等待客户端的连接请求。当客户端连接成功后,服务器端通过Socket类与客户端通信。通过循环接收多个客户端的连接请求,实现了多客户端之间的通信。