Skip to main content
德胜云
  万速智能9 > 服务器知识

python套接字socket编程搭建简易服务器,完成计算器实例

2023-02-05 00:40:26 浏览:

python套接字socket编程搭建简易服务器,完成计算器实例

python套接字socket编程搭建简易服务器,完成计算器实例

什么是套接字socket编程

套接字socket是一种客户端/服务器端,即C/S的架构机制,主要用于网络中的进程之间的通信。需要两个特殊的文件,一个在服务器端,一个在客户端,并各自维护。

套接字socket编程更重要的是其编程思想,而且每一种计算机语言(可以用来写后端的语言)基本上都可以实现套接字socket编程,而不是python的专有的。

socket编程实例

下面我们用python的socket编程开发一个客户端和服务器端交互而成的计算器。注意,这里的客户端和服务器端都在本地计算机上。

server.py服务器端

# -*- coding:utf-8 -*- import socket ip_port = (127.0.0.1,5656) #记住address是元组的格式,其中127.0.0.1通常用来表示本机,8888表示端口; # 通常情况下,0~1023是保留端口,1024~65535为用户端口,可以随便设置。 #步骤:用socket()方法创建socket对象 sk = socket.socket() #步骤:用bind()方法绑定服务器地址,这里是本机 sk.bind(ip_port) #步骤:用listen()函数监听客户端发送来的请求 sk.listen(5) #其中5表示在拒绝连接之前,操作系统可以挂起的最大连接数量 #步骤:利用阻塞机制,等待连接 connect, address = sk.accept() #accept()函数返回的connect是连接的通信对象,用来接收、发送数据,address是连接客户端的地址 while True: data = connect.recv(1024).decode() #1024为一次接收数据的最大量——数据可以分多次进行接收——这样可以避免数据太大,瘫痪内存; #网络编程就是对数据按规定好的协议进行组装成包、发送、接收、解码、呈现等过程的处理, #所以注意decode()函数解码的作用 if data == socket_ok: print(通信完成) break datalist = list(data) f = datalist[1] a = float(datalist[0]) b = float(datalist[2]) if f == +: result = a+b elif f == -: result = a-b elif f == *: result = a*b elif f== /: result = a/b else: continue connect.sendall(str(result).encode()) #这里为什么要用str()函数来转化呢?因为int或float类型没有encode()函数 #有解码,就必须有编码encode()就是用来编码的 connect.close()

client.py客户端

# -*- coding:utf-8 -*- import socket ip_port = (127.0.0.1, 5656) #注意要与server端的保持一致 #创建socket对象 sk = socket.socket() #连接server端 sk.connect(ip_port) while True: data = input(计算:) if data == : continue data = data.encode() #发送之前要进行编码 sk.sendall(data) if data == socket_ok: print("socket结束!") recv_data = sk.recv(1024).decode() if recv_data != : print(%s = %s%(data,recv_data)) sk.close()

如此,一个简易的服务器就搭建完成了。

代码输出:

上面实例的代码输出: 算:1+2 b1+2 = 3.0 计算:1/2 b1/2 = 0.5 计算:1*2 b1*2 = 2.0

我们该如何同时运行server.py和client.py这两个脚本文件呢?

因为要完成这两个脚本之间的通信,两个脚本应该都被运行起来?

因为服务器端和客户端都在本地计算机上,所以很可能会发生 [Errno 61] Connection refused错误,那该怎么办呢?

更多关于python的socket编程原理、步骤、以及上面的两个问题的解决办法,可以参考如下内容:

python套接字socket编程,原理、步骤、计算器实例 - 大器编程

python套接字socket编程搭建简易服务器,完成计算器实例

  • 燃爆了「什么是CDN?要不要用CDN?CDN能够做什么?」迈
  • 不要告诉别人「Linux服务器故障排查基本方案」linux服
  • 真没想到「用Shell脚本快速部署L2TP服务器」shell
  • 万万没想到「CentOS8服务器搭建L2TP服务器(over
  • 燃爆了「内网DNS域名解析」内网dns域名解析异常内网dns