Python网络编程之TCP套接字简单用法示例

沈亦白
沈亦白
发布时间:2026-10-11| 4人浏览过
原创

本文介绍如何使用Python进行TCP网络编程,通过socket模块实现服务器与客户端的通信。服务器端利用两个套接字(欢迎套接字和通信套接字)处理并发连接,客户端通过单一套接字发起连接并交换数据。文章包含完整的服务器和客户端代码示例,涵盖绑定、监听、接受连接及数据收发等核心步骤。

TCP套接字编程基础

在Python中实现TCP网络通信,核心在于使用socket模块。TCP(传输控制协议)是一种面向连接的协议,确保数据在发送方和接收方之间可靠传输。对于服务器端而言,通常需要维护两个套接字:一个是“欢迎套接字”(listening socket),用于监听客户端的连接请求;另一个是“通信套接字”(communication socket),用于与已连接的客户端进行实际的数据交换。这种设计允许服务器同时接待多个客户端,提高并发处理能力。

服务器端实现

服务器端的代码主要完成以下任务:创建套接字、绑定地址与端口、开始监听、接受连接、处理数据以及关闭连接。以下是具体的实现代码:

#!/usr/bin/python
'test TCP server'
from socket import *  #套接字所需要的模块
from time import ctime  #时间模块

HOST = ''  #主机名,为空,表示可以绑定在任何有效的地址上。
PORT = 21567  #随机选的可用端口
BUFSIZ = 1024  #发送数据的缓冲区
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)  #第一个参数是socket_family,此处用常用的AF_INET,第二个参数是流套接字,即创建的是tcp
tcpSerSock.bind(ADDR)  #套接字与地址绑定
tcpSerSock.listen(5)  #开始监听,参数表示允许的最大连接数

while True:
  print 'waiting for connection...'
  tcpCliSock, addr = tcpSerSock.accept()  #打开大门等待客人,accept返回一个元组(connection,address)。第一个元素是新的socket对象,服务器必须通过它与客户通信;第二个是客户的地址。
  print '...connected from:',addr
  
  while True:
    data = tcpCliSock.recv(BUFSIZ)  #洗耳恭听,把客人的话记录到data中
    if not data:  #客人话说完了,送客
      break
    tcpCliSock.send('[%s] %s' %(ctime(), data))  #发送当前时间,以及数据给客人
  
  tcpCliSock.close()  #送客,关闭与该客人通信的套接字

tcpSerSock.close()  #因为上面是死循环,此处不是必须的,只是提醒大家离开的时候务必要关门!

在上述代码中,tcpSerSock作为欢迎套接字,负责监听端口21567。当客户端发起连接时,accept()方法会返回一个新的套接字对象tcpCliSock和客户端的地址addr。服务器通过tcpCliSock与客户端进行数据交互,并在通信结束后关闭该通信套接字。需要注意的是,tcpSerSock.close()在无限循环中通常不会被执行,但它是一个良好的编程习惯,确保服务器在退出时释放资源。

客户端实现

客户端的代码相对简单,主要任务是创建套接字、连接到服务器、发送和接收数据。以下是客户端的实现代码:

#!/usr/bin/python
'test tcp client'
from socket import *

HOST = 'localhost'  #因为我是在同一台机器上运行,所以是localhost,不同主机的话,此处需要改成服务器地址
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)  #客户端只需要一个套接字
tcpCliSock.connect(ADDR)  #发起连接

while True:
  data = raw_input('>')
  tcpCliSock.send(data)  #发送数据
  if not data:
    break
  data = tcpCliSock.recv(BUFSIZ)  #接收数据
  print data

tcpCliSock.close()

在客户端代码中,HOST设置为'localhost',表示客户端和服务器运行在同一台机器上。如果客户端和服务器在不同主机上,需要将HOST修改为服务器的IP地址或域名。客户端通过connect()方法连接到服务器,并通过send()和recv()方法进行数据交换。用户通过raw_input()输入数据,服务器会将当前时间和接收到的数据一起返回给客户端。

总结

通过上述示例,我们展示了如何使用Python进行简单的TCP网络编程。服务器端通过两个套接字实现并发连接处理,客户端通过单一套接字与服务器通信。这种模式是网络编程的基础,适用于各种需要可靠数据传输的场景。希望本文能帮助你更好地理解和应用Python中的TCP套接字编程。

以上就是Python网络编程之TCP套接字简单用法示例的详细内容,更多关于Python网络编程、TCP套接字、socket编程的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。