Java网络编程函数:Socket和ServerSocket的用法介绍
Socket和ServerSocket是Java网络编程中的重要函数,用于实现基于TCP/IP协议的客户端与服务端通信。本文将详细介绍它们的用法。
1. Socket
Socket是一种可靠的TCP/IP连接。在Java应用程序中使用Socket可以创建一个客户端连接到指定的服务器端口并与之通信。Socket类的常用方法如下:
1) 构造函数:
Socket(String host, int port):创建一个Socket对象,并绑定到指定的主机号和端口号。
2) 通信接口:
void close():关闭该Socket及其相关流和套接字。
InputStream getInputStream():获取Socket的输入流。
OutputStream getOutputStream():获取Socket的输出流。
void setSoTimeout(int timeout):设置Socket的超时时间。
3) 流操作:
int read(byte[] b):读取指定字节数组的数据(会阻塞)。
int read(byte[] b, int off, int len):从指定位置读取指定长度的数据(会阻塞)。
int read():从输入流中读取一个字节(会阻塞)。
void write(byte[] b):写入指定字节数组的数据。
void write(byte[] b, int off, int len):从指定位置写入指定长度的数据。
void write(int b):向输出流中写入一个字节。
2. ServerSocket
ServerSocket是一个侦听传入TCP连接请求的类。ServerSocket类的常用方法如下:
1) 构造函数:
ServerSocket(int port):使用指定端口号创建一个ServerSocket对象。
2) 通信接口:
Socket accept():侦听并接受连接,返回一个新的Socket对象。
3) 配置操作:
void setSoTimeout(int timeout):设置ServerSocket的超时时间。
void setReuseAddress(boolean on):启用/禁用ServerSocket的地址复用。
使用ServerSocket可以实现多线程服务器的编写,具体实现方法如下:
1) 创建ServerSocket对象,指定服务端口。
2) 创建一个线程池,用于并发处理客户端请求。
3) 在主线程中建立循环,调用ServerSocket的accept()方法监听客户端请求连接。
4) 当有客户端请求连接时,将Socket传入处理线程池中运行并处理客户端请求,并继续等待下一个客户端连接。
示例代码如下:
public class Server {
private ServerSocket serverSocket;
private ExecutorService executorService; // 线程池
public Server(int port) throws IOException {
serverSocket = new ServerSocket(port);
executorService = Executors.newCachedThreadPool(); // 初始化线程池
System.out.println("Server started.");
}
public void service() {
while (true) {
try {
Socket socket = serverSocket.accept(); // 监听客户端连接请求
executorService.submit(new Handler(socket)); // 提交处理线程到线程池执行
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
Server server = new Server(8000);
server.service();
}
}
class Handler implements Runnable {
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 处理客户端请求...
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是Socket和ServerSocket的用法介绍,希望对读者有所帮助。
