Python网络编程之TCP套接字简单用法示例
本文介绍如何使用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编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









