Python中套接字实现服务端和客户端2

2.3 监听套接字

通过listen()方法监听套接字。该方法的格式如下所示。

python 复制代码
socket.listen([backlog])

其中,参数backlog是一个可选项,表示等待服务器接收连接的客户端的数量。使用listen()方法监听套接字的代码如下所示。

python 复制代码
s.listen(1)

当没有客户端连接时,服务端会阻塞在该行代码中,等待客户端的连接;如果有客户端连接,服务端代码才会继续向下运行。

运行以上代码,可以看到服务端的12345端口处于TCP协议的监听状态(LISTEN),如图2所示。

图2 服务器的监听端口

2.4 接受连接

当有客户端连接服务端时,服务端会调用accept()方法接受客户端的连接。该方法的格式如下所示。

python 复制代码
socket.accept()

accept()方法的返回值是一个元组,包含了新创建的套接字和连入服务端的客户端的地址信息,该地址信息包含了客户端的IP地址和端口号。

使用accept()方法接受客户端连接的代码如下所示。

python 复制代码
conn, addr = s.accept()

其中conn表示新创建的用于数据传输的套接字,addr是一个元组,保存了连入服务端的客户端的IP地址和端口号。

当有客户端连接服务端时,可以看到服务端套接字的状态,如图3所示。

图3服务器套接字状态

其中,图2①表示服务端的IP地址和端口号;图2②表示连入服务端的客户端的IP地址和端口号;图2③表示该套接字的状态,ESTABLISHED表示已经建立。

在accept()代码之后,输出打印客户端信息的代码,如下所示。

python 复制代码
print('Connected by', addr)

此时,服务端输出的信息如图4所示。

图4 服务端输出的客户端信息

其中,显示的连入服务端的客户端IP地址和端口号与图2中相同。

2.5 接收数据

当创建了用于数据通信的套接字后,使用recv()方法接收来自客户端的数据,如果客户端没有发送数据,则程序会阻塞在recv()方法处,直到接收到客户端的数据,程序才会向下运行。

recv()方法的格式如下所示。

python 复制代码
socket.recv(bufsize[, flags])

其中,第一个参数bufsize指定了一次最多接收数据的大小,单位是字节;第二个参数flags是可选参数,指定了接收数据时的方式,默认值是0。

2.6 关闭套接字

在完成以上操作后,通过close()方法关闭之前创建的套接字,代码如下所示。

python 复制代码
conn.close()
s.close()
相关推荐
Hommy887 分钟前
【开源剪映小助手】配置与部署
python·开源·aigc·剪映小助手
V搜xhliang024616 分钟前
基于¹⁸F-FDG PET/CT的深度学习-影像组学-临床模型预测非小细胞肺癌脉管侵犯的价值
大数据·人工智能·python·深度学习·机器学习·机器人
TRACER~8530 分钟前
项目实战:pyqt6实现拼豆图纸生成器
python·pyqt
Flandern111133 分钟前
Go程序员学习AI大模型项目实战02:给 AI 装上“大脑”:从配置解包到流式生成的深度拆解
人工智能·后端·python·学习·golang
qq_2837200538 分钟前
Python 数据分析:Pandas+NumPy 超详细教程
python·数据分析·pandas
dragen_light41 分钟前
气象数据下载-Climate Data Store
python
许杰小刀43 分钟前
Python网络请求库,从 requests 到 httpx
开发语言·python·httpx
ZC跨境爬虫1 小时前
Scrapy实战爬取5sing网站:Pipeline优化+全流程踩坑复盘,从报错到数据落地
前端·爬虫·python·scrapy
ZhuNian的学习乐园1 小时前
LLM智能体调度:从ReAct到多智能体调度
人工智能·python·深度学习
喵叔哟1 小时前
6.【.NET10 实战--孢子记账--产品智能化】--认证与安全包
python·安全·flask