You need to enable JavaScript to run this app. 本地Python TCP客户端与服务器连接测试问题及解决示例
优惠活动
大模型
产品
解决方案
定价
更多

本地Python TCP客户端与服务器连接测试问题及解决示例

Python TCP收发示例运行无接收提示问题解决

运行环境

  • 开发IDE:PyCharm
  • Python版本:3.6
  • 已配置收发两端脚本并行运行权限

初始版本代码

服务端代码

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('localhost', 5005)
print(sys.stderr, 'starting up on %s port %s' % server_address)
sock.bind(server_address)

# Listen for incoming connections
sock.listen(1)

while True:
    # Wait for a connection
    print(sys.stderr, 'waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print(sys.stderr, 'connection from', client_address)

        # Receive the data in small chunks and retransmit it
        while True:
            data = connection.recv(16)
            print(sys.stderr, 'received "%s"' % data)
            if data:
                print(sys.stderr, 'sending data back to the client')
                connection.sendall(data)
            else:
                print(sys.stderr, 'no more data from', client_address)
                break

    finally:
        # Clean up the connection
        connection.close()

客户端代码

import socket
TCP_IP = 'localhost'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode('utf-8'))

问题表现

两端脚本运行无任何报错,客户端调试逐行运行均正常执行,但服务端无任何数据接收相关提示。

问题原因

  • 服务端打印逻辑错误:代码中print(sys.stderr, '日志内容')的写法是将sys.stderr对象作为普通内容输出到标准输出流,并未实现日志输出到标准错误流的预期,正确写法为print('日志内容', file=sys.stderr)。若PyCharm控制台做了日志流过滤,就会看不到相关输出,误以为服务端未收到数据。
  • 客户端逻辑缺失:发送数据后无任何等待逻辑直接结束进程,可能触发TCP连接快速重置,导致服务端来不及读取内核缓冲区的接收数据就断开连接。

修复后可运行代码

服务端代码

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # 标准回环接口地址(localhost)
PORT = 65432        # 监听端口(非特权端口为大于1023的端口)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data + b' from server')

客户端代码

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # 服务端主机名或IP地址
PORT = 65432        # 服务端监听的端口

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

运行结果

Received b'Hello, world from server'

内容的提问来源于stack exchange,提问作者Marco Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:21:01