当前位置: 技术文章>> 100道python面试题之-如何使用Python的socket库创建TCP和UDP服务器与客户端?

文章标题:100道python面试题之-如何使用Python的socket库创建TCP和UDP服务器与客户端?
  • 文章分类: 后端
  • 7591 阅读

在Python中,使用socket库可以方便地创建TCP和UDP的服务器与客户端。下面分别介绍如何使用socket库来创建这两种类型的服务器和客户端。

TCP 服务器

TCP服务器通常监听一个端口,等待客户端的连接请求,然后接收来自客户端的数据,处理这些数据,并可能发送响应给客户端。

import socket

def tcp_server(host='127.0.0.1', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(5)  # 最大连接数
    print(f"TCP服务器启动,监听{host}:{port}")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"接受来自{addr}的连接")
        try:
            while True:
                data = client_socket.recv(1024)
                if not data:
                    break
                print(f"收到数据: {data.decode()}")
                # 发送响应
                client_socket.sendall(data)
        finally:
            client_socket.close()

if __name__ == '__main__':
    tcp_server()

TCP 客户端

TCP客户端连接到服务器,发送数据,并接收来自服务器的响应。

import socket

def tcp_client(server_host='127.0.0.1', server_port=12345):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((server_host, server_port))
    
    try:
        message = input("请输入要发送的消息: ")
        client_socket.sendall(message.encode())
        
        data = client_socket.recv(1024)
        print(f"来自服务器的响应: {data.decode()}")
    finally:
        client_socket.close()

if __name__ == '__main__':
    tcp_client()

UDP 服务器

UDP服务器与TCP服务器的主要区别在于UDP是无连接的,并且不保证数据包的顺序和完整性。

import socket

def udp_server(host='127.0.0.1', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind((host, port))
    print(f"UDP服务器启动,监听{host}:{port}")

    while True:
        data, addr = server_socket.recvfrom(1024)
        print(f"从{addr}接收数据: {data.decode()}")
        # 发送响应
        server_socket.sendto(data, addr)

if __name__ == '__main__':
    udp_server()

UDP 客户端

UDP客户端发送数据到服务器,并接收来自服务器的响应(如果服务器设计为发送响应)。

import socket

def udp_client(server_host='127.0.0.1', server_port=12345):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    message = input("请输入要发送的消息: ")
    client_socket.sendto(message.encode(), (server_host, server_port))
    
    data, server = client_socket.recvfrom(1024)
    print(f"来自服务器的响应: {data.decode()}")
    
    client_socket.close()

if __name__ == '__main__':
    udp_client()

以上示例展示了如何使用Python的socket库来创建TCP和UDP的服务器与客户端。这些示例可以作为构建更复杂网络通信应用的基础。

推荐文章