简单的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网络编程的更多相关文章

  1. Python之旅Day8 socket网络编程

    socket网络编程 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可.soc ...

  2. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  3. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  4. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  5. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  6. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  7. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  8. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  9. windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

  10. windows下的socket网络编程(入门级)

    windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...

随机推荐

  1. Ubuntu下的解压缩

    一. 命令: .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz ...

  2. C# - 计时器Timer

    System.Timers.Timer 服务器计时器,允许指定在应用程序中引发事件的重复时间间隔. using System.Timers: // 在应用程序中生成定期事件 public class ...

  3. MySQL时间分组查询

    表TESTER 字段:id -- INT    date  -- TIMESTAMP 1.如何按年.月.日分组查询? select DATE_FORMAT(date,'%Y-%m-%d') time, ...

  4. (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

  5. SpringMVC的执行流程(二)

    文字解析: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配 DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交 ...

  6. List Set Map

    List Set 都是接口,都继承了Collection接口 ArrayList LinkList 直接实现了List接口 HashSet 实现了Set接口  TreeSet继承父类AbstractS ...

  7. .Net导出pdf文件,C#实现pdf导出

    最近碰见个需求需要实现导出pdf文件,上网查了下代码资料总结了以下代码.可以成功的实现导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本, ...

  8. HTML5应用程序缓存Application Cache

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  9. Linux命令-文件文本操作grep

    文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...

  10. 跳转时候提示Attempt to present on while a presentation is in progress

    出现这种情况,例如:我在获取相册图片后,直接present到另一个页面,但是上一个页面可能还未dismiss,所以,要在获取相册图片的dismiss方法的complete的block里面写获取图片及跳 ...