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字典序问题实例
Sep 26 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
详解python运行三种方式
May 13 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Django中URL的参数传递的实现
Aug 04 Python
python3中numpy函数tile的用法详解
Dec 04 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
python 负数取模运算实例
Jun 03 Python
python opencv实现图像配准与比较
Feb 09 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 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
第十四节 命名空间 [14]
2006/10/09 PHP
php基础知识:类与对象(1)
2006/12/13 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
PHP加密解密类实例代码
2016/07/20 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
理解AngularJs指令
2015/12/10 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
关于环保的建议书
2014/05/12 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python