Python使用TCP通讯例子

本文介绍了如何使用Python的socket库实现TCP服务器和客户端的连接,包括设置缓冲区大小、绑定和监听端口,以及单次或多轮连接操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP通讯十分常用,对应Python库为socket

import json
import socket 

tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF,65536)
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,65536)
print(f'Send Buf: {tcp_server.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)}') 
print(f'Recv Buf: {tcp_server.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)}') 

tcp_server.bind(('127.0.0.1', 2022))
tcp_server.listen(128)

print(f'Server IP: {tcp_server.getsockname()}')

while True:
    client_socket, client_addr = tcp_server.accept()
    data = client_socket.recv(1024)
    print(f'Request: {data.decode()}')
    data = json.loads(data)
    data['status'] = 'ok'
    data = json.dumps(data)
    client_socket.send(data.encode())

上段为TCP服务端,下段为TCP客户端,如果只需要单次连接的话去掉循环就好;

import time
import json
import socket

while True:
	server_addr = ('127.0.0.1', 2022) 
	tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	tcp_client.settimeout(5)
	tcp_client.connect(server_addr)
	data = json.dumps({'message':'status'})

	tcp_client.send(data.encode())
	data = tcp_client.recv(1024)
	print(f'Respond: {data.decode()}')    
	tcp_client.close()
	time.sleep(1)
<think>好的,我现在需要帮助用户了解如何使用Python进行TCP/IP通信。首先,我得回忆一下Python中常用的网络编程库,比如socket模块。用户可能对socket编程不太熟悉,所以需要从基础开始解释。 接下来,我应该区分TCP和UDP的不同。TCP是面向连接的,可靠传输,而UDP是无连接的,可能丢包但速度快。用户的问题是关于TCP/IP的,所以重点放在TCP上。 然后,我需要考虑如何组织回答结构。可能分成服务器端和客户端的实现步骤,每个步骤给出代码示例。代码需要正确使用socket模块的函数,比如socket.socket(),bind(), listen(), accept(), connect(), send(), recv()等。同时,要确保代码符合Python 3的语法,比如print函数的使用和字节流的处理(encode/decode)。 用户提供的引用中有提到Python 3的例子和阻塞式socket编程,所以应该使用阻塞模式的示例,且注明Python版本。另外,引用[3]提到了epoll,但用户的问题可能不需要涉及高级的异步处理,所以暂时不深入,可能作为后续优化方法提到。 还要注意错误处理,比如try-except块,或者关闭socket的正确方法。但为了简洁,示例可能先省略复杂的错误处理,保持代码简洁易懂。 生成相关问题的时候,可以考虑TCP和UDP的区别、非阻塞socket、处理多客户端连接的方法(如多线程、select、asyncio)、常见错误排查等。这些问题能帮助用户进一步学习。 检查引用是否正确,用户提供的引用[1]到[4]中,引用[3]和[4]可能与示例代码相关,可以在解释中引用。例如,在提到Python的socket API时,可以引用[3],在讨论网络技术时引用[4]。 最后,确保所有行内数学表达式(如果有的话)使用$...$,独立公式用$$...$$,但这个问题可能不太涉及数学公式,所以可能不需要。但需要检查是否有其他格式要求,比如代码块用三个反引号包裹,标明语言。 总结步骤: 1. 介绍TCP/IP通信的基本概念,引用相关引用。 2. 分步骤讲解服务器端和客户端的实现,给出代码示例。 3. 解释代码中的关键函数和流程。 4. 提供优化方法或扩展知识,如多线程、异步。 5. 生成相关问题,引导深入学习。</think>要使用Python进行TCP/IP通信,可以通过内置的`socket`模块实现。以下是分步说明和示例代码: ### 一、TCP通信基础原理 TCP是面向连接的可靠传输协议,通过三次握手建立连接[^4]。Python使用`socket.socket()`创建套接字对象,指定`AF_INET`(IPv4)地址族和`SOCK_STREAM`(TCP)类型[^3]。 ### 二、服务端实现步骤 1. 创建套接字对象 2. 绑定IP地址和端口 3. 开始监听连接 4. 接受客户端连接 5. 收发数据 6. 关闭连接 ```python # 服务端代码 import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('127.0.0.1', 8080)) server_socket.listen(5) # 最大排队连接数 print("等待客户端连接...") client_socket, addr = server_socket.accept() print(f"已连接客户端地址: {addr}") data = client_socket.recv(1024) print(f"收到消息: {data.decode()}") client_socket.send("已收到消息".encode()) client_socket.close() server_socket.close() ``` ### 三、客户端实现步骤 1. 创建套接字对象 2. 连接服务器 3. 收发数据 4. 关闭连接 ```python # 客户端代码 import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('127.0.0.1', 8080)) message = "Hello Server!" client_socket.send(message.encode()) response = client_socket.recv(1024) print(f"服务器响应: {response.decode()}") client_socket.close() ``` ### 四、关键函数说明 - `bind((host, port))`: 绑定服务端地址 - `listen(backlog)`: 启动监听模式 - `accept()`: 阻塞等待客户端连接 - `connect((host, port))`: 客户端发起连接 - `send()/recv()`: 发送/接收字节流数据 ### 五、优化与扩展方法 1. 使用多线程处理多客户端连接 2. 采用`select`或`asyncio`实现异步通信 3. 使用`SocketServer`模块简化开发 4. 添加异常处理机制(如连接超时、断线重连) ```python # 多线程服务端示例 from threading import Thread def handle_client(client_socket): # 处理客户端请求 pass while True: client, addr = server_socket.accept() Thread(target=handle_client, args=(client,)).start() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值