开发中会用到数据通信,包括发送和接收数据,今天我们就来聊聊怎么使用socket发送和接收数据。
Socket的概念
Socket(套接字)是网络通信的基础,它是一个抽象的概念,用于描述一个网络连接的端点。在TCP/IP网络中,一个Socket由一个IP地址和一个端口号唯一标识。Socket允许不同主机上的进程进行通信,它们可以发送和接收数据。
Socket的分类
- 流式Socket(Stream Sockets):
- 基于TCP协议,提供可靠的、面向连接的通信。
- 数据传输保证顺序和完整性。
- 数据报Socket(Datagram Sockets):
- 基于UDP协议,提供无连接的服务。
- 数据传输不保证顺序和完整性,但可能更快。
Socket通信过程
- 服务器监听(Listen):
- 服务器Socket绑定到一个端口号,并监听客户端的连接请求。
- 客户端连接(Connect):
- 客户端Socket指定服务器的IP地址和端口号,发起连接请求。
- 三次握手(Three-way Handshake):
- TCP连接建立的过程,确保双方都能发送和接收数据。
- 数据传输(Data Transfer):
- 一旦连接建立,客户端和服务器就可以通过Socket进行数据传输。
- 连接终止(Close):
- 数据传输完成后,通过四次挥手(Four-way Wavehand)过程关闭连接。
Socket的用法详解
服务器端Socket编程
- 创建Socket: ServerSocket serverSocket = new ServerSocket(portNumber);
- 监听连接: Socket clientSocket = serverSocket.accept();
- 输入输出流: InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream(); - 读取数据: byte[] buffer = new byte[1024];
int bytesRead = input.read(buffer);
String message = new String(buffer, 0, bytesRead); - 发送数据: String response = "Hello from Server";
output.write(response.getBytes()); - 关闭连接: clientSocket.close();
serverSocket.close();
客户端Socket编程
- 创建Socket: Socket socket = new Socket(serverAddress, portNumber);
- 输入输出流: OutputStream output = socket.getOutputStream();
InputStream input = socket.getInputStream(); - 发送数据: String message = "Hello from Client";
output.write(message.getBytes()); - 读取数据: byte[] buffer = new byte[1024];
int bytesRead = input.read(buffer);
String response = new String(buffer, 0, bytesRead); - 关闭连接: socket.close();
注意事项
- 异常处理:Socket编程中需要处理各种网络异常,如连接超时、断开连接等。
- 资源管理:确保在finally块中关闭Socket和流,以释放资源。
- 安全性:对于敏感数据,使用SSL/TLS等加密协议来保护数据传输的安全。
- 性能优化:对于高并发场景,考虑使用非阻塞IO(NIO)或异步IO(AIO)。
创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。