json模块补充

json保存的格式中,key值一定要用双引号隔开

import json
#把字典转成json格式字符串
dic = {'name': 'lqz', 'xx': False, 'yy': None}
print(type(dic)) #字典类型 dic_s = json.dumps(dic)
#json格式字符串
print(type(dic_s))#字符串类型(json形式) dic_s2 = str(dic)
print(dic_s2)
print(type(dic_s2)) #是字符串,但是不是json格式的字符串 json.dumps() #字典转成字符串(json)
json.dump() #字典转成字符串(json),并存到文件中 json.loads() #把json格式字符串转成字典
json.load() #从文件中把json格式字符串转成字典 #不是json格式字符串转换,直接报错
ss = 'falseee'#会报错,普通字符串不能转换,(false,null,还有字典{},列表[]除外)
ss = 'false'#打印出来是bool值
print(json.loads(ss))
print(type(json.loads(ss))) ss = {'name': 'lqz', 'xx':False, "yy":None}
print(json.dumps(ss))
print(type(json.dumps(ss)))
'''
{"name": "lqz", "xx": false, "yy": null}
<class 'str'>
'''

套接字编程(TCP)

###服务端
import socket #买手机,实例化生成一个socket对象
server = socket.socket() #绑定手机卡, 监听地址
server.bind(('127.0.0.1', 8003)) #监听,设置半连接池的大小
server.listen(5) #连接循环
while True:
#一旦有个客户端来连接成功,会返回两个值,
# 如果没有,会卡在这
conn, addr = server.accept() #通信循环
while True:
#卡在这,等着客户端来发
data = conn.recv(1024)
conn.send(data.upper())
conn.close()
server.close() #客户端 import socket
client = socket.socket()
client.connect(('127.0.0.1', 8003))
#通信循环
while True:
msg = input('>>>:')
client.send(msg.encode('utf8'))
#client.send(bytes(msg, 'utf8')) #和上面的语句相同
data = client.recv(1024)
print(data)
client.close()

套接字编程(TCP)(解决粘包问题)

粘包问题:我的理解是,由于TCP协议是流式协议,像流水一般是连续的,所以有可能我的数据尾会和后面的数据头连在一块,形成粘包。(TCP协议会把数据量较小,时间间隔较短的数据,一次性发过去)

详细了解请>>>>https://www.cnblogs.com/nickchen121/p/11031027.html

#客户端_粘包

import socket
import struct
import json
client =socket.socket()
client.connect(('127.0.0.1', 8003))
while True: #通信循环
msg=input('开始接收?>>:')
#先收4个字节,取出头部的长度
head_len=struct.unpack('i',client.recv(4))[0]
#接收头部
dic=json.loads(client.recv(head_len))
l=dic['size']
name=dic['name']
count=0
data=b''
with open(name,'wb') as f:
while count<l:
if l<1024:
data_temp=client.recv(l)
else:
if l-count>=1024:
data_temp=client.recv(1024)
print(data_temp) else:
data_temp=client.recv(l - count)
data+=data_temp
count+=len(data_temp)
f.write(data) print('接收完成')
client.close() #服务端_粘包 import socket
import os
import json
import struct
server=socket.socket()
server.bind(('127.0.0.1', 8003))
server.listen(5)
while True: #连接循环
#一旦有个客户端来连接成功,会返回两个值,如果没有,会卡在这
conn,addr=server.accept() while True: #通信循环
#加个文件头
# {size:os.path.getsize(),name:'333.py',md5:asdfasdfasfd}
#计算一下头的长度
dic={'size':os.path.getsize('json模块.py'),'name':'xxxxxx.py'}
#转成bytes格式
dic_b=bytes(json.dumps(dic),'utf-8')
#获取长度
dic_b_len=len(dic_b)
obj=struct.pack('i',dic_b_len)
#发送四个字节
conn.send(obj)
#发头部内容
conn.send(dic_b)
#直接以+形式打开,就不需要转换了 rb
with open('json模块.py','rb') as f:
# conn.send(f.read())
# f 是文件对象,它可迭代
for line in f:
conn.send(line)
conn.close()
server.close()

套接字编程(TCP)的更多相关文章

  1. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  2. Linux 套接字编程 - TCP连接基础

    第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取) ...

  3. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  4. 初探网络编程--TCP套接字编程演示

    今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...

  5. 基本套接字编程(1) -- tcp篇

    1. Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机 ...

  6. 套接字编程相关函数(2:TCP套接字编程相关函数)

    本文摘录自<UNIX网络编程 卷1>. 基本套接字函数 socket函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.其定义如下: #in ...

  7. UDP,TCP的套接字编程的Python实现

    UDP,TCP的套接字编程的Python实现 套接字:连接应用层和运输层,应用层的网络应用程序使用IP地址+端口号来标识自己,然后通过套接字调用运输层为其服务,网络应用程序只能指定自己要使用的网络类型 ...

  8. TCP和UDP套接字编程 (java实现)

    在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...

  9. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  10. 20181225 基于TCP/IP和基于UDP/IP的套接字编程

    一.TCP/IP的套接字编程 服务器端代码: import  socket​server = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...

随机推荐

  1. 主流chatbot机器人调研

    wit.ai api.ai microsoft bot frameword rasa pydial 问答系统 语义匹配 语义表示式匹配与交互式匹配.语义表示式匹配是将用户query与候选query分别 ...

  2. WebAPI 使用控制台启动

    using System; using System.Web.Http; using System.Web.Http.SelfHost; namespace UAC_OAuth2Center { pu ...

  3. RabbitMQ心跳检测与掉线重连

    1.RabbitMQListener,自定义消息监听器 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using ...

  4. K8S 如何实现将git代码下拉到指定的容器路径中

    gitRepo 是 kubernetes Volume类型中的一种,gitRepo volume可以实现将git代码下拉到指定的容器路径中. 备注:实现此功能,Pod运行的节点都必需要安装git.换句 ...

  5. 使用numpy处理数组

    def fun_ndarray(): a = [[1,2,7], [-6,-2,-3], [-4,-8,-55] ] b = np.array(a) b = np.abs(b)#取数组的绝对值 pri ...

  6. Laravel框架中Echo的使用过程

    今天的这篇文章中给大家分享关于laravel框架中echo的使用,文章的内容是一步一步来的,用了16步走完一个过程,过程很清晰,希望可以帮助到有需要的朋友吧.话不多说,直接看内容.官方文档推荐使用 P ...

  7. ES6高级技巧(四)

    238 数字->二进制->补码->十进制 const bitwise = N => { if (N < 2) { return N == 0 ? 1 : 0 } /*转化 ...

  8. 第十九节:Asp.Net Core WebApi基础总结和请求方式

    一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...

  9. MarkDown的一些基本语法

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写 ...

  10. 【2】hexo+github搭建个人博客的简单使用

    使用hexo+github搭建一个可以外网访问的个人博客,此文用于记录博客初级的使用方法. 新建-编写-生成-部署文章的全过程 1.使用cmd完成 打开命令提示符[win+r输入cmd] 切换到自己本 ...