Python网络编程入门

一.Socket

简称套接字,是进程之间通信的一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间要想进行网络通信需要Socket,Socket好比数据的搬运工~

2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端。

  • 服务端:等待其他进程的连接,可接受发来的消息、可以回复消息~
  • 客户端: 主动连接服务端,可以发送消息,可以接受回复~

一个服务端可以接受多个客户端发来的消息,如下图:

二.服务端开发

1.导入socket包

2.创建一个Socket对象

python 复制代码
socket_server = socket.socket()

3.绑定IP地址和端口

python 复制代码
socket_server.bind(('localhost', 1319))

端口号自定义,但别和nodejs、Jupyter、MySQL或者Tomcat这些重合了就行~

4.监听端口

python 复制代码
socket_server.listen(1)

函数内参数设置为1,表示同时最多接受1个客户端的连接。

5.等待客户端连接

这里使用accept方法,这是一个阻塞方法:如果没有连接,则后续的代码皆不执行~

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

accept返回的是一个二元元组:

  • conn:客户端和服务端的连接对象
  • address:客户端的地址信息

测试连接情况:

python 复制代码
print(f"Connected by: {addr}")

6.接受客户端信息

python 复制代码
data:str = conn.recv(1024).decode('utf-8')
#类型注释,字符串型

recv接受的参数是缓冲区大小,这里一般给1024即可。此外其返回值为一个字节数组也即bytes对象,需要decode方法通过UTF-8编码,将字节数组转换为字符串对象~

python 复制代码
print(f"message:{data}")

7.回复消息

python 复制代码
msg=input("回复消息:").encode('utf-8')
conn.send(msg)

input键入的是字符串对象,因此需要先编码为字节数组~

8.关闭链接

python 复制代码
conn.close()
socket_server.close()

三.客户端开发

总的来说异曲同工,甚至更为简易:

python 复制代码
import socket
socket_client= socket.socket()
socket_client.connect(('127.0.0.1', 1325))  #就是localhost,别犹豫
socket_client.send(bytes('Hello, client!', 'utf-8'))
recv_data=socket_client.recv(1024)
print(f"回复的消息是:{recv_data.decode('utf-8')}")
socket_client.close()

四.测试

将两个py文件都运行起来:

服务端已经收到了客户端发来的消息了,这时我们回复以后,客户端亦可正常收到~

相关推荐
Wang's Blog2 分钟前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
‎ദ്ദിᵔ.˛.ᵔ₎3 分钟前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo9 分钟前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
信誓旦旦的程序猿28 分钟前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫43 分钟前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
下一站春风里1 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
数字新视界2 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
隔窗听雨眠2 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
天外飞雨道沧桑2 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl2 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言