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套接字的编码问题解决的更多相关文章
- 全网最详细python中socket套接字send与sendall的区别
将数据发送到套接字. 套接字必须连接到远程套接字. 返回发送的字节数. 应用程序负责检查是否已发送所有数据; 如果仅传输了一些数据, 则应用程序需要尝试传递剩余数据.(需要用户自己完成) 将数据发送 ...
- tcp通讯中socket套接字accept和listen的关系
今天看到一个文章,客户端的connect在服务端调用accept之前,突然想到这可以建立正常的连接么?以前从没细细的思考过listen accept connect之前的关系,带着疑问学习了一下,记录 ...
- 一、网络编程-UDP传输协议及socket套接字使用
知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP 2.ip:ip就是标记网络中中的一台电脑 ...
- 19 网络编程--Socket 套接字方法
1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...
- 网络编程基础之Socket套接字简单应用
一.Socket套接字实现通信循环 所谓通信循环,简单理解就是客户端可以给服务端循环发送信息并获得反馈的过程. 1.基础版 通信循环的程序分为两部分,即两个python模块,分别为客户端.py和服务端 ...
- 网络编程基础之Socket套接字
一.Socket介绍 1.什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族 ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
- socket套接字编程 HTTP协议
socket套接字编程 套接字介绍 1. 套接字 : 实现网络编程进行数据传输的一种技术手段 2. Python实现套接字编程:import socket 3. 套接字分类 >流式套接 ...
随机推荐
- kotlin, 一种新的android平台一级开发语言
最近看到一则科技新闻, 大致内容是google将kotlin语言作为android应用开发的一级语言, 与java并驾齐驱, 这是一个开发界的大事件大新闻, 连google的亲儿子go语言也没有这种待 ...
- XML文件生成
import java.io.* ; import org.w3c.dom.* ; import javax.xml.parsers.* ; import javax.xml.transform.* ...
- .Net Core应用搭建的分布式邮件系统设计
本篇分享的是由NetCore搭建的分布式邮件系统,主要采用NetCore的Api和控制台应用程序,由于此系统属于公司的所以这里只能分享设计图和一些单纯不设计业务的类或方法: 为什么要在公司中首例采用N ...
- SmartCoder每日站立会议09
站立会议内容 今天约了在一起编程,详细确定各个页面以及消息的添加.发送等一些小的细节. 1.站立会议照片: 2.任务展板 2.燃尽图
- [原创]MongoDB_Sharding
Mongo Sharding:本示例搭建了三个副本集作为三个分片的sharding集群,其中master,slave,factershi三台同网段的内网主机.前期规划和原理分析省略,可根据具体配置推导 ...
- python脚本 随机定位坐标
import mathimport randomdef rad(dg): return (dg * math.pi / 180)def deg(rd): return (rd * 180 ...
- Win95+IE3 – Win10+IE11全版本执行漏洞(含POC)
微软本月安全更新修复了一个潜藏了18年的IE远程代码执行漏洞(CVE-2014-6332),可以说是给windows吃了一颗大补丸.缺陷出现在VBScript的代码中,自Windows 95首次发布( ...
- Java内存数据模型
本篇文章带来的是对Java内存数据模型的介绍,这对于我们深入理解Jvm虚拟机工作的原理和Java内存的划分大有裨益,好了,为了让我们理解的更为深刻,我们将会加入图片辅助的方法去理解. 本篇博文的目录: ...
- java实现文件批量导入导出实例(兼容xls,xlsx)
1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...
- poj3648
poj3648 题意 有一对新人结婚,n-1对夫妇去参加婚礼.有一个很长的座子,新娘与新郎坐在座子的两边(相反).接下来n-1对夫妇就坐,其中任何一对夫妇都不能坐在同一边,且(有一些人有奸情)这些有奸 ...