网络编程基础-Socket编程

举报
小博测试成长之路 发表于 2022/01/14 23:42:09 2022/01/14
【摘要】     大家都知道,HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。缺点就是会导致过多不必要的请求,每一次请求、应答,都浪费了一定流量在相同的头部信息上。然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需...

    大家都知道,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服务端和客户端通信


   
  1. # socket_server.py
  2. import socket
  3. ip_port = ('127.0.0.1', 1234)
  4. # 1、创建socket对象
  5. obj = socket.socket()
  6. # 2、绑定ip port
  7. obj.bind(ip_port)
  8. # 3、开启监听
  9. obj.listen()
  10. print('服务端已启动')
  11. # 4、等待连接 、返回套接字和客户端ip地址
  12. conn, address = obj.accept()
  13. print('客户端地址:', address)
  14. # 5、接收客户端数据
  15. receive_data = conn.recv(1024).decode('utf-8')
  16. print("接收到客户端的数据", receive_data)
  17. # 6、发送数据
  18. send_data = input('请输入要发送的数据:')
  19. conn.sendall(send_data.encode('utf-8'))
  20. # 7、关闭socket
  21. conn.close()

   
  1. # socket_client.py
  2. import socket
  3. ip_port = ('127.0.0.1', 1234)
  4. # 1、创建socket对象
  5. obj = socket.socket()
  6. # 2、连接服务端
  7. obj.connect(ip_port)
  8. # 3、发送数据
  9. send_data = input('请输入要发送的数据:')
  10. obj.sendall(send_data.encode('utf-8'))
  11. # 4、接收服务端数据
  12. server_data = obj.recv(1024).decode('utf-8')
  13. print("接收到客户端的数据", server_data)
  14. # 5、关闭socket
  15. obj.close()

注意:发送的数据格式要进行编码,接收后要进行转码操作。

然后先后运行socket_server.py和socket_client.py文件,就可以实现客户端和服务端的通信,脚本运行结果如下:

以上只是socket的一个最最最简单的用法,包括一些概念也是从网上各种查找资料进行整理,对概念的理解还不够深入,后续看视频更深入的理解之后再进行补充。

有问题都可以在知识星球或者添加小编微信提问喔,有想进学习交流群的也可以添加微信。具体方式在公众号菜单处可以看到。

文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaobotester.blog.csdn.net/article/details/118347855

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。