Python网络通讯之TCP协议实现服务器和客户端实例
作者:灰勒塔德
前言:
上一期我们初步学习了解了网络通讯的概念(网络编程之网络与通信介绍),那么这一期我们就接着学习通过网络编程来实现服务器和客户端之间的信息传送。
Socket编程
1.简介
socket编程一种独立于协议的网络编程接口,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
2. Python中的socket
在Python当中已有一个socket封装好的模块,当我们想通过Python去实现socket编程的时候,只需要把这个模块导入就行了,然后按照里面的方法就可以去搭建一个局域网的服务器和用户端。
导入模块
import socket
服务器的实现
每次当我们在微信、QQ上发送一条信息的时候,我们发送的信息会通过局域网然后传递到公网上,再传入到绑定公网的服务器当中,然后服务器再通过网络协议往下传给接收者。网络通讯大概就是这么一个过程,那这里我通过tcp协议来去实现局域网直接的服务器的代码
import random import socket #1.创建服务器对象 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 参数1:socket.AF_INET, 表示 ipv4地址 # 参数2:socket.SOCK_STREAM表示 tcp协议封装好的参数 #2.获取当前计算机地址的代码 p=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) p.connect(('8.8.8.8',80)) nowip=p.getsockname()[0] p.close() port=8888 print('当前的ip地址:',nowip) print('当前端口号:',port) #3.把服务器绑定到本计算机上 server.bind((nowip,port)) #4.设置监听模式,设置最大的监听数 server.listen(128) #设置最大的连接数128 print('服务端已启动,等待连接……') #5.等待客户的连接 conn, addr = server.accept() # conn 是连接客户端的套接字对象 # addr 是表示客户端的连接地址 while 1: try: #6.接受客户端的数据 #网络数据都是以字节流的形式去发送的 data=conn.recv(1024).decode('utf8') #参数1024表示每次接受最大的字节数,decode进行解码,由字节流编码转换为字符 if not data:#当接受到空数据的时候就说明客户端断开了连接 print(f'{addr}断开了连接') break print(f'----{addr}发送了----',data) #7.返回一个0~100的随机数数据给客户端 conn.send(str(random.randint(0,100)).encode('utf8'))#进行字节流编码发送 except ConnectionResetError: print('error') break #7.关闭套接字对象 conn.close() #8.关闭服务器 server.close()
用户端的实现
客户端的代码实现也是跟服务器差不多的,实现要先去创建一个客户端对象,然后连接到服务器的地址以及端口号,然后就可以去实现与服务器进行信息发送与接受了。代码如下:
#客户端 import socket #1.创建客户端对象 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.连接服务器地址和端口 client.connect(('10.33.110.204',8888)) count=1 #计数 while 1: a=input(r'输入你要发送的内容(\q退出):').strip() if a==r'\q': break if not a: #当发送的数据为空时就重新输入 print('发送的数据不能为空') continue #3.把数据发送给服务器 client.send(a.encode('utf8')) #4.获取到服务器发送的数据 data = client.recv(1024) # receive if not data: break print(f'对方发送的消息--{count}--:',data.decode("utf8")) count+=1 #5.关闭客户端 client.close()
(注意:以上的代码功能是在局域网内才能实现服务器和客户端之间的信息发送与接受,如果两台设备连接不同的WiFi的话那就发送不了信息了)
到此这篇关于Python网络通讯之TCP协议实现服务器和客户端实例的文章就介绍到这了,更多相关PythonTCP协议实现服务器和客户端内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!