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协议可以