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下编程了,这次因为需要做一个跨平台的网络程序,就先 ...
随机推荐
- ASP.NET MVC——CodeFirst开发模式
Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First.Database First是最老也是应用得最广泛的一种设计方式 ...
- spring事务概念理解
1.数据并发问题 脏读 A事务读取B事务尚未提交的更新数据,并在此数据的基础上操作.如果B事务回滚,则A事务读取的数据就是错误的.即读取了脏数据或者错误数据. 不可重复组 A事务先后读取了B事务提交[ ...
- 用css隐藏元素的5种方法
.green { width: 100px; height: 100px; background-color: #a0ee00; text-align: center; float: left; ma ...
- 利用github pages创建简单的网站
github.com 作为最流行的源代码管理工具已经风靡全球,同时在依托于github也衍生出了各种各样的应用,比如可以利用github搭建博客系统等等. 先换个话题,我们每人手头都或多或少有些&qu ...
- TabLayout+ViewPager+Fragment制作页卡
本人很懒,直接上代码了. 布局文件: <?xml version="1.0" encoding="utf-8"?><android.suppo ...
- UINavigationBar 和view 重叠覆盖问题
如果没有是storyboard进行界面设计,在ios7之后会遇到rootviewcontroller的view被navigationbar遮盖的问题,其实很好解决 - (void)viewDidLoa ...
- Node.js学习——基本模块之fs
基本模块之fs 异步读文件 异步读取一个文本文件的代码如下: 'use strict'; var fs = require('fs'); fs.readFile('sample.txt', 'utf- ...
- (四)Spark集群搭建-Java&Python版Spark
Spark集群搭建 视频教程 1.优酷 2.YouTube 安装scala环境 下载地址http://www.scala-lang.org/download/ 上传scala-2.10.5.tgz到m ...
- Oracle学习笔记八 表空间
表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 . 分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下 ...
- 树莓派3B更新软件
因为软件是要不断更新的,所以半个月或者一个月要升级一下软件 升级软件非常简单 在终端或者SSH里输入 sudo apt-get update && apt-get upgrade -y ...