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中的字符串与字符串的输入输出
Mar 13 Python
Python利用IPython提高开发效率
Aug 10 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
基于Python的文件类型和字符串详解
Dec 21 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
Django中使用MySQL5.5的教程
Dec 18 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
js三种排序算法分享
2012/08/16 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
.net C#面试题
2012/08/28 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
linux面试题参考答案(8)
2016/04/19 面试题
保安员岗位职责
2013/11/17 职场文书
《颐和园》教学反思
2014/02/26 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang