Java TCP Socket
简介
Java提供了Socket类和ServerSocket类,用于在网络上建立TCP连接。Socket类用于客户端,而ServerSocket类用于服务器端。通过这两个类,可以实现基于TCP协议的网络通信。
TCP协议
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输协议。它提供了数据可靠性、流量控制、拥塞控制等功能。
TCP连接是一种双向的通信链路,客户端和服务器之间可以相互发送和接收数据。连接的一方称为客户端,发起连接请求;另一方称为服务器端,接受连接请求。
Socket类
Socket类是Java提供的用于客户端的套接字类。通过Socket类可以创建一个TCP连接,并向服务器发送请求或接收服务器的响应。
Socket类的常用方法
Socket(String host, int port)
:创建一个到指定主机和端口的套接字。InputStream getInputStream()
:获取套接字的输入流,用于接收服务器发送的数据。OutputStream getOutputStream()
:获取套接字的输出流,用于发送数据到服务器。void close()
:关闭套接字。
示例代码
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 创建套接字,连接到指定主机和端口
Socket socket = new Socket("localhost", 12345);
// 获取套接字的输出流
OutputStream outputStream = socket.getOutputStream();
// 向服务器发送数据
String message = "Hello, Server!";
outputStream.write(message.getBytes());
outputStream.flush();
// 获取套接字的输入流
InputStream inputStream = socket.getInputStream();
// 接收服务器的响应数据
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String response = new String(buffer, 0, length);
// 输出服务器的响应数据
System.out.println("Server response: " + response);
// 关闭套接字
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ServerSocket类
ServerSocket类是Java提供的用于服务器端的套接字类。通过ServerSocket类可以监听指定的端口,接受客户端的连接请求,并与客户端建立TCP连接。
ServerSocket类的常用方法
ServerSocket(int port)
:创建一个绑定到指定端口的服务器套接字。Socket accept()
:监听并接受客户端的连接请求,返回与客户端建立的套接字。void close()
:关闭服务器套接字。
示例代码
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
// 创建服务器套接字,监听指定端口
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server started, waiting for client...");
// 接受客户端的连接请求
Socket socket = serverSocket.accept();
System.out.println("Client connected: " + socket.getInetAddress());
// 获取套接字的输入流
InputStream inputStream = socket.getInputStream();
// 接收客户端发送的数据
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String request = new String(buffer, 0, length);
// 输出客户端发送的数据
System.out.println("Client request: " + request);
// 获取套接字的输出流
OutputStream outputStream = socket.getOutputStream();
// 向客户端发送响应数据
String response = "Hello, Client!";
outputStream.write(response.getBytes());
outputStream.flush();
// 关闭套接字
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
本文介绍了Java中的TCP套接字编程,使用Socket类和ServerSocket类可以实现基于TCP协议的网络通信。通过Socket类,客户端可以向服务器发送请求,接收服务器的响应;通过ServerSocket类,服务器可以监听指定端口,接受客户端的连接请求,并与客户端建立TCP连接。使用TCP协议可以