📜  监听TCP(1)

📅  最后修改于: 2023-12-03 15:27:15.993000             🧑  作者: Mango

监听TCP

本文介绍如何在程序中监听TCP连接。

什么是TCP?

TCP(传输控制协议)是Internet协议族中的一个传输层协议,它提供了可靠的、面向连接的数据传输服务。TCP协议保证在客户端和服务器之间的数据传输中不丢失、不重复、按顺序到达并可恢复。

TCP服务器

要监听TCP连接,我们需要在程序中创建一个TCP服务器。

Python示例

在Python中,我们可以使用socket模块创建一个TCP服务器。以下是一个简单的Python程序,它创建一个在localhost上监听端口8888的TCP服务器。

import socket

HOST = 'localhost'
PORT = 8888

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen()

while True:
    # 等待客户端连接
    client_socket, addr = server_socket.accept()
    print('Connected by', addr)

    # 接收客户端数据
    data = client_socket.recv(1024)
    print('Received from client:', data)

    # 回复客户端
    client_socket.sendall(data)

    # 断开连接
    client_socket.close()
Java示例

在Java中,我们可以使用ServerSocket类创建一个TCP服务器。以下是一个简单的Java程序,它创建一个在localhost上监听端口8888的TCP服务器。

import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;

public class TCPServer {
    private static final int PORT = 8888;

    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(PORT)) {
            System.out.println("Server started at port " + PORT);

            while (true) {
                // 等待客户端连接
                Socket socket = serverSocket.accept();
                System.out.println("Connected by " + socket.getInetAddress());

                // 接收客户端数据
                InputStream inputStream = socket.getInputStream();
                byte[] buffer = new byte[1024];
                int length = inputStream.read(buffer);
                String data = new String(buffer, 0, length, "UTF-8");
                System.out.println("Received from client: " + data);

                // 回复客户端
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write(buffer, 0, length);
                outputStream.flush();

                // 断开连接
                socket.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
结语

以上示例程序可以帮助程序员了解如何在程序中监听TCP连接。在实际应用中,我们还需要考虑TCP连接的安全性、并发性、性能等问题,这些是需要进一步研究和实践的。