基于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 08 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
在Django中创建动态视图的教程
Jul 15 Python
Python快速从注释生成文档的方法
Dec 26 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
Django 拆分model和view的实现方法
Aug 16 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python办公自动化之Excel(中)
May 24 Python
总结Python常用的魔法方法
May 25 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
php实现分页工具类分享
2014/01/09 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python strip()函数 介绍
2013/05/24 Python
用Python写冒泡排序代码
2016/04/12 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
个人委托书怎么写
2014/09/17 职场文书
银行贷款委托书范本
2014/10/11 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
安全保证书
2015/01/16 职场文书
水电工岗位职责
2015/02/14 职场文书
钢琴师观后感
2015/06/12 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers