网络编程基础-Socket编程
2021/7/1 12:21:44
本文主要是介绍网络编程基础-Socket编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大家都知道,HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。缺点就是会导致过多不必要的请求,每一次请求、应答,都浪费了一定流量在相同的头部信息上。然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
Socket是传输控制层协议,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。WebSocket是应用层协议。接下来让我们一起来了解一下在python里面是如何使用Socket进行编程的。
Socket通信流程:
1、服务器根据地址类型、socket类型、协议创建socket对象
2、服务器为socket绑定ip地址和端口号
3、服务器socket监听端口号请求,随时准备接收客户端发过来的连接请求(这时候socket并没有被打开)
4、客户端创建socket
5、客户端根据服务器ip地址和端口号试图连接服务器socket
6、服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,即accept()方法一直等到客户端返回连接信息后才返回,开始接收下一个客户端连接请求
7、客户端连接成功,向服务器端发送连接状态信息
8、服务器accept()方法返回,连接成功
9、客户端向服务端socket写入信息/服务端向客户端写入信息
10、服务端读取信息/客户端读取信息
11、客户端和服务端关闭连接
Socket通信模型
python代码实现socket服务端和客户端通信
# socket_server.py import socket ip_port = ('127.0.0.1', 1234) # 1、创建socket对象 obj = socket.socket() # 2、绑定ip port obj.bind(ip_port) # 3、开启监听 obj.listen() print('服务端已启动') # 4、等待连接 、返回套接字和客户端ip地址 conn, address = obj.accept() print('客户端地址:', address) # 5、接收客户端数据 receive_data = conn.recv(1024).decode('utf-8') print("接收到客户端的数据", receive_data) # 6、发送数据 send_data = input('请输入要发送的数据:') conn.sendall(send_data.encode('utf-8')) # 7、关闭socket conn.close()
# socket_client.py import socket ip_port = ('127.0.0.1', 1234) # 1、创建socket对象 obj = socket.socket() # 2、连接服务端 obj.connect(ip_port) # 3、发送数据 send_data = input('请输入要发送的数据:') obj.sendall(send_data.encode('utf-8')) # 4、接收服务端数据 server_data = obj.recv(1024).decode('utf-8') print("接收到客户端的数据", server_data) # 5、关闭socket obj.close()
注意:发送的数据格式要进行编码,接收后要进行转码操作。
然后先后运行socket_server.py和socket_client.py文件,就可以实现客户端和服务端的通信,脚本运行结果如下:
以上只是socket的一个最最最简单的用法,包括一些概念也是从网上各种查找资料进行整理,对概念的理解还不够深入,后续看视频更深入的理解之后再进行补充。
这篇关于网络编程基础-Socket编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享