day8-------socket网络编程
简单的socket 一个server同时只能处理一个链接 代码如下:
server端代码
#author = ruixin li import socket
server = socket.socket()
server.bind(("0.0.0.0",5000))
server.listen(5)
print("开始监听")
while True:
conn,addr = server.accept()
print("一个新连接")
print(conn,addr)
while True:
try:
data = conn.recv(1024)
print("收到的信息:",data)
conn.send(data.upper())
except ConnectionResetError as e:
print("客户端主动断开连接")
break
server.close()
客户端程序 import socket cli = socket.socket()
cli.connect(("localhost",5000))
while True:
inp = input("请输入指令:".strip())
if len(inp) == 0:
continue
else:
cli.send(inp.encode())
data = cli.recv(1024)
print(data)
python socket 实现简单的 ssh 命令
#author ruixin li import socket
import subprocess
ips = input("请输入绑定的IP:")
ports = int(input("请输入绑定的端口:"))
server = socket.socket()
server.bind((ips,ports))
server.listen(5)
print("开始监听")
while True:
print("跳到外部循环")
conn,addr = server.accept()
print("一个新连接")
print(conn,addr)
while True:
try:
date = conn.recv(1024)
if len(date) == 0:
print("收到0信息,服务器主动断开连接")
break
else:
print("收到的信息:",date)
msg = subprocess.Popen(date,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
data = msg.stdout.read()
print(data)
dataerr = msg.stderr.read()
print("err:",dataerr)
if len(data) == 0:
conn.send(dataerr)
else:
conn.send(data)
except ConnectionResetError as e:
print("客户端主动断开连接")
break
server.close() 客户端
import socket
ips = input("请输入要连接的IP:")
ports = int(input("请输入要连接的端口:")) cli = socket.socket()
cli.connect((ips,ports))
while True:
inp = input("请输入指令:".strip())
if len(inp) == 0:
continue
else:
cli.send(inp.encode())
data = cli.recv(1024)
print(data)
socket 实现简单的FTP上传下载功能
#客户端代码
#author : ruixin li import socket
import hashlib
import os
#ips = input("请输入要连接的IP:")
#ports = int(input("请输入要连接的端口:")) print("说明:下载服务器文件到当前路径")
cli = socket.socket()
cli.connect(("localhost",5000))
while True:
inp = input("请输入指令: 按Q退出: ".strip())
if len(inp) == 0:
continue
elif inp == "q":
exit()
elif inp.split()[0] == "get":
inp_file_name = inp.split()[1]
cli.send(inp.encode())
tmp = cli.recv(1024).decode()
print("文件大小",tmp)
print(type(tmp))
remote_file_size = int(tmp)
print("服务端返回文件总大小:",remote_file_size)
local_size = 0
cli.send("收到大小,请发文件内容".encode())
file_name = inp.split()[1]
f = open(file_name.split("/")[-1] + ".new","wb")
while local_size < remote_file_size:
#f = open(file_name + ".new","wb")
data = cli.recv(1024)
f.write(data)
local_size += len(data)
# f.close()
print("文件总大小:",remote_file_size,"接收到:",local_size)
else:
print("文件下载完成,文件总大小:",remote_file_size,"接收到:",local_size)
f.close()
cli.send("请发送MD5".encode())
remote_md5 = cli.recv(1024).decode()
print("接收到服务端的MD5:",remote_md5)
f = open(file_name.split("/")[-1] + ".new", "rb")
m2 = hashlib.md5()
for i in f:
m2.update(i)
print("本地文件MD5",m2.hexdigest())
f.close()
if m2.hexdigest() == remote_md5 :
print("文件校验成功")
else:
print("文件下载不完整")
elif inp.split()[0] == "put":
inp_file_name = inp.split()[1]
cli.send(inp.encode()) if os.path.isfile(inp_file_name): put_file_size = str(os.stat(inp_file_name).st_size).encode()
cli.send(put_file_size)
tmp = cli.recv(1024)
print("等待确认",tmp.decode())
f = open(inp_file_name,"rb")
for line in f:
cli.send(line)
f.close()
print("文件发送完毕") cli.close() #服务端代码 import socket
import subprocess
import os
import hashlib
#ips = input("请输入绑定的IP:")
#ports = int(input("请输入绑定的端口:"))
server = socket.socket()
server.bind(("localhost",5000))
server.listen(5)
print("开始监听")
while True:
print("跳到外部循环")
conn,addr = server.accept()
print("一个新连接")
print(conn,addr)
while True:
date = conn.recv(1024)
if len(date) == 0:
print("收到0信息,服务器主动断开连接")
break
else:
print("收到的信息:",date)
args1,file_name = date.split()
print("第一个参数",args1.decode(),"第二个参数",file_name.decode())
if args1.decode() == "get":
print("走下载")
if os.path.isfile(file_name.decode()):
file_total_size = str(os.stat(file_name.decode()).st_size).encode()
print(file_total_size)
print(type(file_total_size))
conn.send(file_total_size)
conn.recv(1024)
print("等待客户端ack应答")
f = open(file_name.decode(),"rb")
m = hashlib.md5()
for line in f:
conn.send(line)
m.update(line)
hash_md5 = (m.hexdigest())
print("文件MD5:",hash_md5)
f.close()
print("文件发送完毕")
tmp = conn.recv(1024)
print(tmp.decode())
conn.send(hash_md5.encode())
else:
print("文件不存在")
continue
elif args1.decode() == "put":
print("开始上传文件")
# if os.path.isfile(file_name.decode().split("/")[-1]):
# print("文件已存在")
# conn.send("文件已存在".encode()) remote_file_size = int(conn.recv(1024).decode())
print("收到客户端文件大小:",remote_file_size)
put_file_size = 0
conn.send("可以发送数据了".encode())
f = open(file_name.decode().split("/")[-1],"wb")
while put_file_size < remote_file_size:
recv_data = conn.recv(1024)
f.write(recv_data)
put_file_size += len(recv_data)
f.close()
print("文件总大小:",remote_file_size,"接收到的大小",put_file_size)
day8-------socket网络编程的更多相关文章
- Python之旅Day8 socket网络编程
		socket网络编程 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可.soc ... 
- Linux Socket 网络编程
		Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ... 
- Python Socket 网络编程
		Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ... 
- Python全栈【Socket网络编程】
		Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ... 
- python之Socket网络编程
		什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ... 
- Python之路【第七篇】python基础 之socket网络编程
		本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ... 
- Socket网络编程-基础篇
		Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ... 
- Socket网络编程--FTP客户端
		Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ... 
- windows下的socket网络编程
		windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ... 
- windows下的socket网络编程(入门级)
		windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ... 
随机推荐
- 解决VS调试时断点不会命中
			断点调试是VS中的一大利器,有了它我们可以快速定位到代码的问题所在.在某些情况下会导致设置了断点后程序无法在断点处停下,下面分4种情况来解决断点不会命中的问题 百度经验:jingyan.baidu.c ... 
- .Net Html如何上传图片到一般应用程序
			用html实现图片上传 后台采用.net其中在这里要借用一个js插件 在这里我会写一个图片上传的一个小Demo,有不全的地方多多包容,和提议, 我把已经写好的demo已经上传到百度云 在这里可以下载 ... 
- 记录一次bug解决过程:mybatis中$和#的使用
			一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ... 
- 运算符.png
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计
			目 录 第十三章 中英文版本切换设计... 2 13.1 不用自带的资源文件的理由... 2 13.2 配置文件... 2 13.3 语言 ... 
- js原生跨域--用script标签实现
			刚刚从培训班学习完,总想写一下东西,自从进入了这个院子,每次出现问题,总是能找到一些答案,给我一些帮助. 作为新手,就写一下简单的吧,院子里面有很多大牛, 说句实话,他们的很多代码我都看不懂. 我就写 ... 
- Arcmap中加载互联网地图资源
			本文转载自:http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地 ... 
- [Android]异步 layout inflation(翻译)
			以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5829809.html 异步 layout inflation ... 
- [转]HttpModule的认识
			HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ... 
- react-native Simulator com+r不能刷新模拟器
			这个问题是我按了com + shift + K 调出Simulatior 的时候出现的, 然后虚拟机就刷新不了了, 怎么按com+r都不好使. 在Simulatior的菜单栏选择Hardware -- ... 
