基于python中的TCP及UDP(详解)


Posted in Python onNovember 06, 2017

python中是通过套接字即socket来实现UDP及TCP通信的。有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字。

TCP通信模型

基于python中的TCP及UDP(详解)

创建TCP服务器

伪代码:

ss = socket() # 创建服务器套接字
ss.bind() # 套接字与地址绑定
ss.listen() # 监听连接
inf_loop: # 服务器无限循环
 cs = ss.accept() # 接受客户端连接
 comm_loop: # 通信循环
  cs.recv()/cs.send() # 对话(接收/发送)
 cs.close() # 关闭客户端套接字
ss.close() # 关闭服务器套接字#(可选)

TCP时间戳服务器:

import socket
from time import ctime

HOST = ''
PORT = 8099
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
 print("等待连接......")
 tcpCliSock, addr = tcpSerSock.accept()
 print("...接收到连接:", addr)
 while True:
  data = tcpSerSock.recv(BUFSIZE)
  if not data:
   break
  tcpCliSock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data))
 tcpCliSock.close()
tcpSerSock.close()

创建TCP客户端:

伪代码:

cs = socket() # 创建客户端套接字
cs.connect() # 尝试连接服务器
comm_loop: # 通信循环
 cs.send() / cs.recv() # 对话(发送/接收)
cs.close() # 关闭客户端套接字

TCP时间戳客户端:

import socket

HOST = 'localhost'
PORT = 8099
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
 data = input("> ")
 if not data:
  break
 tcpCliSock.send(data)
 data = tcpCliSock.recv(BUFSIZE)
 if not data:
  break
 print(data)
tcpCliSock.close()

UDP通信模型

基于python中的TCP及UDP(详解)

创建UDP服务器

伪代码:

ss = socket() # 创建服务器套接字
ss.bind() # 绑定服务器套接字
inf_loop: # 服务器无限循环
 cs = ss.recvfrom()/ss.sendto() # 关闭(接收/发送)
ss.close() # 关闭服务器套接字

UDP时间戳服务器:

import socket
from time import ctime

HOST = ''
PORT = 8099
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpSerSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
 print("等待连接......")
 data, addr = udpSerSock.recvfrom(BUFSIZE)
 udpSerSock.sendto('[%s] %s' % (ctime(), data), addr)
 print("...接收到连接:", addr)
udpSerSock.close()

创建UDP客户端

伪代码:

cs = socket() # 创建客户端套接字
comm_loop: # 通信循环
 cs.sendto() / cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户端套接字

UDP时间戳客户端:

import socket

HOST = 'localhost'
PORT = 8099
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpCliSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpCliSock.connect(ADDR)
while True:
 data = input("> ")
 if not data:
  break
 udpCliSock.sendto(data, ADDR)
 data, ADDR = udpCliSock.recvfrom(BUFSIZE)
 if not data:
  break
 print(data)
udpCliSock.close()

以上这篇基于python中的TCP及UDP(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中暂存上传图片的方法
Feb 18 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
python 查找字符串是否存在实例详解
Jan 20 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
Centos7 下安装最新的python3.8
Oct 28 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
python中wx模块的具体使用方法
May 15 Python
python实现批量命名照片
Jun 18 Python
对Keras自带Loss Function的深入研究
May 25 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 #Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 #Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 #Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 #Python
Python通过命令开启http.server服务器的方法
Nov 04 #Python
Python实现一个简单的验证码程序
Nov 03 #Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 #Python
You might like
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
python 实现绘制整齐的表格
2019/11/18 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
北京振戎融通Java面试题
2015/09/03 面试题
《藤野先生》教学反思
2014/02/19 职场文书
法制宣传实施方案
2014/03/13 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang