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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python实现带百分比的进度条
Jun 28 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
浅谈Python中的bs4基础
Oct 21 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
Python爬虫学习之翻译小程序
Jul 30 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
python新式类和经典类的区别实例分析
Mar 23 Python
python实现坦克大战
Apr 24 Python
python代码中怎么换行
Jun 17 Python
七个Python必备的GUI库
Apr 27 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
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
python安装pil库方法及代码
2019/06/25 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Python 切分数组实例解析
2019/11/07 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
电大本科自我鉴定
2014/02/05 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
庐山导游词
2015/02/03 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android