当前位置: 首页 > news >正文

Python网络编程入门

一.Socket

简称套接字,是进程之间通信的一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间要想进行网络通信需要Socket,Socket好比数据的搬运工~

2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端。

  • 服务端:等待其他进程的连接,可接受发来的消息、可以回复消息~
  • 客户端: 主动连接服务端,可以发送消息,可以接受回复~

一个服务端可以接受多个客户端发来的消息,如下图:

 

二.服务端开发

1.导入socket包

2.创建一个Socket对象

socket_server = socket.socket()

3.绑定IP地址和端口

socket_server.bind(('localhost', 1319))

端口号自定义,但别和nodejs、Jupyter、MySQL或者Tomcat这些重合了就行~ 

4.监听端口

socket_server.listen(1)

函数内参数设置为1,表示同时最多接受1个客户端的连接。 

5.等待客户端连接

这里使用accept方法,这是一个阻塞方法:如果没有连接,则后续的代码皆不执行~

conn, addr = socket_server.accept()

accept返回的是一个二元元组:

  • conn:客户端和服务端的连接对象
  • address:客户端的地址信息

测试连接情况:

print(f"Connected by: {addr}")

6.接受客户端信息

data:str = conn.recv(1024).decode('utf-8')
#类型注释,字符串型

recv接受的参数是缓冲区大小,这里一般给1024即可。此外其返回值为一个字节数组也即bytes对象,需要decode方法通过UTF-8编码,将字节数组转换为字符串对象~

print(f"message:{data}")

7.回复消息

msg=input("回复消息:").encode('utf-8')
conn.send(msg)

 input键入的是字符串对象,因此需要先编码为字节数组~

8.关闭链接

conn.close()
socket_server.close()

三.客户端开发

总的来说异曲同工,甚至更为简易:

import socket
socket_client= socket.socket()
socket_client.connect(('127.0.0.1', 1325))  #就是localhost,别犹豫
socket_client.send(bytes('Hello, client!', 'utf-8'))
recv_data=socket_client.recv(1024)
print(f"回复的消息是:{recv_data.decode('utf-8')}")
socket_client.close()

四.测试

将两个py文件都运行起来:

服务端已经收到了客户端发来的消息了,这时我们回复以后,客户端亦可正常收到~

http://www.dtcms.com/a/83347.html

相关文章:

  • 【测试篇】关于自动化测试前言,自动化测试的基本概念
  • 每日学习总结
  • 前端常见面试题(不断更新版)
  • Linux部署若依前后端分离版
  • 【yolo】yolo推理报错,以及解决方案
  • 数字化转型驱动卫生用品安全革新
  • 从零开始实现 C++ TinyWebServer 数据库连接池 SqlConnectPool详解
  • 第5节:AWK环境准备
  • 新增菜品-03.代码开发2
  • 在Windows和Linux系统上的Docker环境中使用的镜像是否相同
  • C++函数与STL
  • 区块链交易
  • [AI速读]用脚本加速高速链路验证:一个高效覆盖率收敛方案
  • 【Tips】Vim文档的使用
  • mysql 对json的处理?
  • AI安全学习(刚开始,未完版)
  • 【C++基础】Lambda 函数 基础知识讲解学习及难点解析
  • OpenCV旋转估计(4)生成一个字符串表示的匹配图函数 matchesGraphAsString()
  • 区块链学习总结
  • DDT数据驱动
  • 说一下yolo的一些概念 和 自己对 置信度阈值 和图像处理模板匹配的理解
  • java设计模式之建造者模式《装修启示录》​
  • 基于DrissionPage的DY无水印视频采集
  • C++与OO思想的联系
  • React 18 如何定义变量,及赋值 与渲染
  • python网络爬虫开发实战之网页数据的解析提取
  • docker常见的命令详细介绍
  • java小白日记38(集合-List)
  • 来源于胡椒的亚甲二氧桥CYP450-文献精读119
  • Android Window浮窗UI组件使用JetPack