Python socket实现的简单通信功能示例


Posted in Python onAugust 21, 2018

本文实例讲述了Python socket实现的简单通信功能。分享给大家供大家参考,具体如下:

套接字(socket)是计算机网络数据结构,在任何类型的通信开始之前,网络应用程序必须创建套接字,可以将其比作电话的插孔,没有它将无法进行通信

常用的地址家族

  • AF_UNIX:基于文件,实现同一主机不同进程之间的通信
  • AF_INET:基于网络,适用于IPv4
  • AF_INET6:基于网络,使用于IPv6

常见的连接类型

  • SOCK_STREAM:即TCP/IP。面向连接的套接字,通信之前必须建立可靠的连接。面向连接的套接字提供序列化的、可靠的和不重复的数据交付,而没有记录边界。
  • SOCK_DGRAM:即UDP。面向非连接的套接字,通信之前无需建立连接。在数据传输过程中无法保证数据的有序性、可靠性和重复性。然而数据报确实保存了记录边界,意味着数据是以整体发送的,而非事先切割多个片段。

socket通信

  • server端
import socket
server = socket.socket()  # 默认是AF_INET、SOCK_STREAM
server.bind(("localhost",6868))   # 将主机号与端口绑定到套接字
server.listen()   # 设置并启动TCP监听器
while True:
  conn,addr = server.accept()   # 被动接受TCP连接,一直等待连接到达
  while True:
    data = conn.recv(1024)   # 接收TCP消息,并制定最大长度
    if not data:
      print("连接已断开")
      break
    conn.send(data.upper())  # 将接收到的数据转为大写在发回给它
server.close()
  • client端
import socket
client = socket.socket()  # 默认是AF_INET、SOCK_STREAM
client.connect(("localhost",6868))
while True:
  s = input(">>")
  client.send(s.encode("utf-8"))
  data = client.recv(1024)
client.close()

执行结果:

Python socket实现的简单通信功能示例

socketserver模块

使用socketserver实现多并发

import socketserver
class MyServer(socketserver.BaseRequestHandler):
  def handle(self):
    while True:
      self.data = self.request.recv(1024)
      if not self.data:
        print("%s客户端连接已断开"%self.client_address)
        break
      self.request.sendall(self.data.upper())
if __name__ == "__main__":
  server = socketserver.ThreadingTCPServer(("localhost",6969),MyServer)  # 开启一个线程
  server.serve_forever()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python数据类型_字符串常用操作(详解)
May 30 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python实现AES加密和解密
Mar 27 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 Python
Python多进程原理与用法分析
Aug 21 #Python
python安装twisted的问题解析
Aug 21 #Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 #Python
Python多线程原理与用法详解
Aug 20 #Python
Python模拟简单电梯调度算法示例
Aug 20 #Python
django_orm查询性能优化方法
Aug 20 #Python
Python Requests库基本用法示例
Aug 20 #Python
You might like
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
session 加入redis的实现代码
2016/07/15 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python中使用PIPE操作Linux管道
2015/02/04 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
python3实现磁盘空间监控
2018/06/21 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
总经理司机职责
2014/02/02 职场文书
自主招生自荐信指南
2014/02/04 职场文书
历史学专业求职信
2014/06/19 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript