Python语言网络编程-基于socket的简易通信
由于意※义※不※明的人工智能课程大作业要求,我花了一下午的时间重新学习了Python语言的网络编程以探求project的网络编程部分的代码实现过程,并最终选择通过socket套接字的方式实现Python语言的简易网络编程。
(今年上半年我也有写过C语言编写的基于Winsock的Windows网络编程,感兴趣的朋友可以看这里:服务器端和客户机端)
编程思路
由于此部分网络编程是包含在大程序中的一个小的通信模块,因此只需实现基本的信息传递功能即可,即编辑socket打开连接并完成初步的信息传递即可。
下面附上的代码块分别为server端和client端的Python语言代码,开发工具为vscode,调试时先运行server再运行client端即可。
话不多说,接下来直接上代码,详细的注释已经附在代码块中。
编程代码(Server端)
import socket
ip_port = ('127.0.0.1',1234) #设置主机IP地址和端口
back_log = 5 #设置客户端最大监听数量
buf_size = 1024
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 初始化TCP连接的socket
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 对socket的配置重用ip和端口号
s.bind(ip_port) # 绑定端口号和socket
s.listen(back_log) # 设置socket端监听对象链接
print("成功创建socket,等待client端链接中...")
while True:
c,address = s.accept() # 阻塞式等待client端的链接
print("接收到来自{}地址的client端连接".format(address))
while 1:
try:
msg = c.recv(buf_size)
if msg.decode('utf-8') == 'end':
c.close() # 断开连接
print('服务器接受到来自client端消息',msg.decode('utf-8'))
except Exception as e:
break
s.close() #关闭监听主socket,服务端程序结束
编程代码(Client端)
import socket
p = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建socket并设置server端连接的IP地址和端口
ip1=(input("请输入server端的IP地址"))
p.connect((ip1,1234))
while 1:
print("已连接到ip为{}的server端".format(ip1)) # 连接成功时将server端ip地址反馈到client端
msg = input('请输入传递给server端的信息,传递消息以end结尾时,停止向server端传递信息')
if not msg: # 设置if判断防止client端输入空消息
continue
p.send(msg.encode('utf-8')) # 使用utf-8的编码方式进行信息传递
if msg == 'end':
print("检测到传输的end命令,连接已断开!")
break
p.close()
注意事项
1.为保证调试方便,server中指定的主机ip设置为127.0.0.1,监听端口设置为1234.
2.client端代码只能设置连接到主机的ip地址,监听端口默认为1234不变。