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. Casbin权限模型

    权限框架casbin1.概述Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin支持以下编程语言: Casbin可以做到:支持自定义请求的格式,默认的请 ...

  2. apache2 不支持php文件 解决办法

    一.修改apache配置文件 vim /usr/local/apache2/conf/httpd.conf 1.在此加上index.php <IfModule dir_module> Di ...

  3. SQL -------- WHERE子句与AND,OR和NOT运算符结合使用。

    AND, OR and NOT  与 运算符中的且或非的意思相同 WHERE子句可以与AND,OR和NOT运算符结合使用. and 表示 查询的语句必须全部包含and 连接的两个或多个条件 or    ...

  4. WindowsServer -------------部署软件

    1.windowsServer 中创建 lls 在服务器中创建lls       参考 将文件扩展名调出 2.安装数据库 将数据库传递到服务器中 安装sqlserver 数据库 3.在系统中创建文件存 ...

  5. windows版mysql8.0安装详解

    2018年07月04日 13:37:40 Zn昕 阅读数 6433更多 分类专栏: mysql   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. ...

  6. 关于 AutoResetEvent 的介绍的简单示例

    关于 AutoResetEvent 的介绍的简单示例 直接贴代码了: class Program { static void Main(string[] args) { string result = ...

  7. 百度前端技术学院task1 总结

    1.居中:当使用text-align或者vatical-align无法达到居中的时候,如果知道元素的大小,可以采用先设为left或right为50%,再设置margin-left或者margin-ri ...

  8. AtCoder diverta 2019 Programming Contest 2

    AtCoder diverta 2019 Programming Contest 2 看起来我也不知道是一个啥比赛. 然后就写写题解QWQ. A - Ball Distribution 有\(n\)个 ...

  9. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 下)

    大家好,在上一篇系列文章里,我们一起学习了路由的基本配置,如何创建路由和传参,本篇文章我们一起学习下 Navigation 导航和路由守卫的相关内容. Navigation 如果要改变当前路径,我们可 ...

  10. 一个JS正则的字符串替换函数

    直接上函数吧  不废话 function replacestring(oldstr,newstr,text) { var exp = new RegExp(oldstr,'g'); var c=tex ...