MST

星途 面试题库

面试题:Python网络编程之Socket通信

请使用Python的socket模块编写一个简单的TCP服务器和客户端程序。要求服务器能够接收客户端发送的字符串,并将该字符串反转后返回给客户端。同时阐述socket通信中TCP和UDP的主要区别。
17.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

TCP服务器程序

import socket


def tcp_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 12345))
    server_socket.listen(1)
    print('Server is listening on port 12345')

    while True:
        client_socket, client_address = server_socket.accept()
        print(f'Connected by {client_address}')
        data = client_socket.recv(1024).decode('utf-8')
        reversed_data = data[::-1]
        client_socket.send(reversed_data.encode('utf-8'))
        client_socket.close()


if __name__ == '__main__':
    tcp_server()

TCP客户端程序

import socket


def tcp_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1', 12345))
    message = "Hello, Server!"
    client_socket.send(message.encode('utf-8'))
    data = client_socket.recv(1024).decode('utf-8')
    print(f"Received from server: {data}")
    client_socket.close()


if __name__ == '__main__':
    tcp_client()

TCP和UDP主要区别

  1. 连接方式
    • TCP:面向连接的协议。在数据传输之前,客户端和服务器之间需要建立一个可靠的连接,就像打电话,双方要先接通才能交流。建立连接需要进行三次握手,传输完毕后需要四次挥手来断开连接。
    • UDP:无连接的协议。就像发短信,不需要事先建立连接,直接将数据发送出去,不管对方是否准备好接收。
  2. 可靠性
    • TCP:提供可靠的数据传输。它通过序列号、确认应答、重传机制等保证数据能准确无误地到达接收方。如果数据在传输过程中丢失或损坏,TCP会自动重传。
    • UDP:不保证数据的可靠传输。数据可能会在传输过程中丢失、重复或乱序到达,应用程序需要自己处理这些情况。
  3. 传输效率
    • TCP:由于要保证可靠性,有较多的控制机制,如流量控制、拥塞控制等,因此传输效率相对较低,尤其在网络环境较差时,可能会频繁重传数据影响效率。
    • UDP:没有复杂的控制机制,开销小,传输效率高,适合对实时性要求高但对数据准确性要求相对较低的场景,如视频流、音频流传输。
  4. 数据边界
    • TCP:是字节流协议,没有数据边界。发送方连续发送的数据,接收方可能分多次接收,需要应用层自己处理数据边界问题。
    • UDP:是数据报协议,有数据边界。发送方发送的一个UDP数据报,接收方要么完整接收,要么接收不到,不会出现部分接收的情况。