python socket自动重连_详解python3中socket套接字的编码问题解决

一、TCP

1、tcp服务器创建

#创建服务器

from socket import *

from time import ctime #导入ctime

HOST = '' #任意主机

PORT = 21567 #随机提供个端口号

BUFSIZ = 1024 # 缓冲区大小设置为1KB,可以根据网络性能和程序需要改变这个容量

ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配了 TCP 服务器套接字

tcpSerSock.bind(ADDR) #绑定到服务器地址以及开启 TCP 监听器的调用。

tcpSerSock.listen(5) #listen()方法的参数是在连接被转接或拒绝之前,传入连接请求的最大数

"""

一旦进入服务器的无限循环之中,我们就(被动地)等待客户端的连接。当一个连接请求出

现时,我们进入对话循环中,在该循环中我们等待客户端发送的消息。如果消息是空白的,这意

味着客户端已经退出,所以此时我们将跳出对话循环,关闭当前客户端连接,然后等待另一个客

户端连接。如果确实得到了客户端发送的消息,就将其格式化并返回相同的数据,但是会在这些

数据中加上当前时间戳的前缀。最后一行永远不会执行,它只是用来提醒读者,如果写了一个处

理程序来考虑一个更加优雅的退出方式,正如前面讨论的,那么应该调用 close()方法。

"""

while True:

print("waiting for connection")

tcpCliSock, addr = tcpSerSock.accept() # 接收客户端连接,返回客户端和地址

print("...connected from:", addr)

while True:

data = tcpCliSock.recv(BUFSIZ).decode() #对话(接收 / 发送) 接收客户端的data

if not data:

break

tcpCliSock.send(('service:'+ctime()+'--'+data).encode()) #发送时间戳 和data信息给客户端

tcpCliSock.close()

tcpSerSock.close()

2、tcp客户端创建

from socket import *

HOST = 'localhost'

PORT = 21567 #端口号 PORT 应该与你为服务器设置的完全相同(否则,将无法进行通信)

BUFSIZ = 1024

ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM) #分配 TCP 客户端套接字

tcpCliSock.connect(ADDR) #主动连接

"""

我们必须解码来自服务器端的字符串(借助于distutils.log.warn()

"""

while True:

data = input("> ")

if not data: #用户如果没有输入,则终止

break

tcpCliSock.send(data.encode()) #发送客户端的data给服务器

data = tcpCliSock.recv(BUFSIZ).decode() #接收服务器的data

if not data: #或者服务器终止且对 recv()方法的调用失败

break

print('返回:%s'%data)

tcpCliSock.close()

二、UDP

1、UDP服务器创建

"""

这个脚本创建一个 UDP 服务器,它接受客户端发来的消息,并将加了时间戳前缀的该消息返回给客户端。

"""

from socket import *

from time import ctime

HOST = ""

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)

udpServer = socket(AF_INET, SOCK_DGRAM)

udpServer.bind(ADDR)

while True:

print("waiting for masssage")

data,addr = udpServer.recvfrom(BUFSIZ) #接收

data = data.decode()

udpServer.sendto((ctime()+"--"+ data).encode(),addr)

print("received from and returned to ",addr)

udpServer.close()

2、UDP客户端创建

#这个脚本创建一个 UDP 客户端,它提示用户输入发送给服务器的消息,并接收服务器加了时间戳前缀的消息,然后将它们显示给用户。

from socket import *

HOST = 'localhost'

PORT = 21567 #端口号 PORT 应该与你为服务器设置的完全相同(否则,将无法进行通信)

BUFSIZ = 1024

ADDR = (HOST, PORT)

udpCS = socket(AF_INET, SOCK_DGRAM)

while True:

data = input("> ")

if not data:

break

udpCS.sendto(data.encode(),ADDR)

data,ADDR = udpCS.recvfrom(BUFSIZ)

if not data:

break

print(data)

udpCS.close()

其实道理都差不多,在python3中,利用套接字传输的内容都以byte形式传输,这时候传送时(send/sendto)需要encode,接收(recv)时需要decode。只要掌握这个重点,处理这个问题就很简单了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: 详解python3中socket套接字的编码问题解决

本文地址: http://www.cppcns.com/jiaoben/python/195081.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java压缩成.tar_java压缩tar.gz | 学步园

zlib、gzip、zip这三个概念的确比较容易混淆:zlib是一种数据压缩程序库,它的设计目标是处理单纯的数据(而不管数据的来源是什么)。gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件。gzip在压缩文件中的…

CentOS 介绍

CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是linux的一个发行版本。CentOS并不是全新的linux发行版,倘若一说到RedHat这个大名,大家似乎都听过&…

Newbe.Claptrap 0.9.4 发布,全新构建

Newbe.Claptrap 0.9.4 发布,全新构建,全新内容,全新体验。简介 此次的版本更新虽然只是一个副版本更新。但实际上我们带来了非常多全新的内容。全方位将本框架带入到一个新的次代。我们希望我们的努力可以为在业务中需要 Actor 模式的开发者带…

【知识贴】战争中的数学应用

一、方程在海湾战争中的应用

Android Donut SDK 1.6r1 今日发布

Google今天公布了新版Android SDK,也就是Donut的最新1.6版,它可以帮助智能手机应用程序开发商迅速将自己的应用转换到Android系统上. SDK的发布有助于Google为自己寻找到更多的合作伙伴,为自己的Android Market添加人气,目前Donut已经可以下载. 下载:Android 1.6 SDK

java让对象分配在栈上_java – Hotspot何时可以在堆栈上分配对象?

我做了一些实验,以便了解Hotspot何时可以进行堆栈分配.事实证明,它的堆栈分配比基于available documentation的预期要有限得多.Choi“Escape Analysis for Java”引用的文章表明,只分配给局部变量的对象总是可以堆栈分配.但事实并非如此.所有这些都是当前Hotspot实现的实现细节…

开始CSRebot

写代码很久了了,时不时想把这些年学到的,用到的,或自己感悟到的,汇总一下,形成一个东西,或资料,或工具。但每当开始时就一片空白,总是觉得这些大家都会,这些只是自己片面…

toast弹窗_Android 开发(一):Toast弹窗与获取控件的值

前言:本人也是刚接触Android开发,自己也在摸索中,在实现功能的过程中走了不少弯路,其中很重要的原因之一就是查询不到想要的内容,所以想把自己的经验分享出来。首先是Toast的应用,直接上关键代码。Toast to…

魔性十足的数学动态图,这种东西都拿出来分享?

小编最近发现了一组超美的与数学有关的动态图,而且看久了简直就有魔性,实在是按耐不住激动的心情,秉持着好图齐分享的原则,在这里和大家一起分享一波~>>>>来源:蒋迅的博客

Command模式

作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. UML结构图: 解析: Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver 类中,由调用…

Dapr微服务应用开发系列4:状态管理构件块

Dapr微服务应用开发系列0:概述Dapr微服务应用开发系列1:环境配置Dapr微服务应用开发系列2:Hello World与SDK初接触Dapr微服务应用开发系列3:服务调用构件块题记:这篇介绍状态管理构件块,这个概念相对于微服…

输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例

最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出N*N顺时针螺旋数组,规律如下:// 1 2 3 4 5// 16 17 18 19 6// 15 24 25 20 7// 14 23 22 21 8// 13 12 11 10 9Java 实现示例代码如下:import java.util.Scan…

开线程插数据_python笔记7-多线程之线程同步(锁lock)

前言丨关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景:吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸。为了避免这种情况,…

一文读懂欧拉函数

欧拉函数φ(N)表示小于或等于N的正整数中与N互质的数的个数。又称φ函数、欧拉商数。下面介绍欧拉函数的几个性质:我们根据这几个性质就可以求出欧拉函数。基本思路是首先置φ(N)N,然后再枚举素数p,将p的整数倍的欧拉函数φ(kp)进行如下操作。…

windows 7在工作组模式下管理 Hyper-V

之前在工作组模式下win7来管理server core 下的hyper-v一直不成功,server core下的相应的防火墙端口也已开放但hyper管理器就是无法和hyper-v主机通讯在2008R2下没有问题,现把解决的过程记录下来,以备后查。1、下载Windows 7 远程服务器管理工…

打工就是 “演戏”,你可以认真,但别太当真

这是头哥侃码的第235篇原创时间飞逝,2021年的春节假期已经结束了。在我的记忆中,以前每逢春节的时候,身边的亲戚和朋友们都会非常忙碌,什么聚个餐,串个门呀,什么拜个年,打个牌啦……但从去年开始…

java多线程adb安装apk卡死_多线程方式安装apk

# -*- coding:utf-8 -*-# 1.获取连接设备的机器ip# 2.获取需要安装的apk# 3.对每一台机器安装apk# 4.检查apk安装是否成功# 5.安装完成import os,subprocessimport _thread#获取设备ip地址,并连接result0def connectDevice(dress):检查设别是否连接成功,…

2018年的第一个工作日,推荐几个优质公众号

2017刚过去不久,我们迎来了2018。工作、生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你有一颗学习的心,那这些学习型的公众号,绝对会让你受益匪浅。小编为你精选了技术领域几个…

redis session java获取attribute_redis里的数据结构

Redis作为当前使用非常广泛的内存数据库,在代码层面做了很多极致的优化,已获取更好的性能。其中重要的一部分,就是对于底层数据结构的使用。Redis会根据数据量、数据大小等来优化对于不同结构的使用,从而获得更佳的运行效率和内存…

.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

2.8 安全认证 VS 授权ASP .NET Core 认证授权中间件认证JWT 认证授权认证 VS 授权认证是一个识别用户是谁的过程授权是一个决定用户可以干什么的过程401 Unauthorized 未授权403 Forbidden 禁止访问ASP .NET Core 认证授权中间件在接收到请求之后,认证(A…