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代码检查工具pylint 让你的python更规范
Sep 05 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
使用python加密自己的密码
Aug 04 Python
python的多重继承的理解
Aug 06 Python
详解python实现线程安全的单例模式
Mar 05 Python
python保存数据到本地文件的方法
Jun 23 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
python滑块验证码的破解实现
Nov 10 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 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
php 无法载入mysql扩展
2010/03/12 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
小程序实现密码输入框
2020/11/16 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
python中assert用法实例分析
2015/04/30 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python:slice与indices的用法
2019/11/25 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
pandas 数据类型转换的实现
2020/12/29 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
岗位职责范本
2013/11/23 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
离婚财产分配协议书
2014/10/21 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
辩护意见书
2015/06/04 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书