一、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

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

  1. python3 yield 大文件_详解Python3中yield生成器的用法

    任何使用yield的函数都称之为生成器,如: def count(n): while n > 0: yield n #生成值:n n -= 1 另外一种说法:生成器就是一个返回迭代器的函数,与普 ...

  2. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  3. python3中unicode怎么写_详解python3中ascii与Unicode使用

    这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...

  4. python爬关键词百度指数_详解python3百度指数抓取实例

    百度指数抓取,再用图像识别得到指数 前言: 土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字: 哥那么叼的人怎么会被他吓到,于是乎花了零零碎碎加起来大约2天半搞定,在此鄙视一下土福 安装的库很多 ...

  5. python格式化字符串语法_详解Python3 中的字符串格式化语法

    一.旧式的字符串格式化 % 操作符 参考以下示例: >>> name = "Eric" >>> "Hello, %s." % ...

  6. java string设置编码_详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着, ...

  7. python中zipfile的使用_详解python3中zipfile模块用法

    一.zipfile模块的简述 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的, 在这里对zipfile的使用方法做一些记 ...

  8. python用函数绘制椭圆_详解opencv中画圆circle函数和椭圆ellipse函数

    1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, doub ...

  9. python3 tkinter详解_详解python3中tkinter知识点

    #导入tkinter模块,以及导入ttk模块,tkinter是python结合tk的标准接口,ttk是TK8.5之后加入的"主题化工具包" from tkinter import ...

最新文章

  1. 特斯拉AI主管给你的33条深度学习训练建议
  2. 详解CSS三大特性之层叠性、继承性和重要性——Web前端系列学习笔记
  3. Spring源码学习:day2
  4. Python urllib、urllib2、urllib3
  5. Vue2.0用户权限控制解决方案
  6. 【数据结构笔记38】桶排序、基数排序、多关键字排序、排序算法汇总比较
  7. Delphi中ListView和TreeView的Item中的内存泄露
  8. 《中国通史 2016》_34_读后感
  9. 锐捷交换机VSU配置
  10. win8计算机时间同步时出错,win10电脑windows time同步出错的解决办法
  11. 马云重构阿里:或分拆成30家公司 整合3家上市【来源:《财经》】
  12. filevault(电子仓库)自动切换文件夹以及文档最大值设置
  13. 如何用 XMind 做商业计划书?
  14. Python sklearn 分类效果评估
  15. 面向对象与面向过程的区别与联系
  16. Facebook:寻找出路的小巨人
  17. 【】评价指标 mrr accuracy recall
  18. SQL 注入之二次注入
  19. “顾客至上,服务至上”??
  20. android 蘑菇街组件化,4. IOS 组件化(蘑菇街的路由+协议式)

热门文章

  1. 通过Roslyn构建自己的C#脚本(更新版)
  2. 详解C# Tuple VS ValueTuple(元组类 VS 值元组)
  3. 云计算设计模式(一)缓存预留模式
  4. ASP.NET CORE 项目实战 ---图形验证码的实现
  5. 01.HTML基础命令笔记
  6. 流程展示 php,js实现动态的流程进度展示条
  7. 【ArcGIS风暴】ArcGIS+CASS点云(.las)数据生成等高线方法案例精解
  8. 30分钟时长千行代码《C#程序设计基础》经典程序,C#菜鸟开发必备!
  9. 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三
  10. WCF服务寄宿IIS时.SVC文件无法浏览的解决办法