python3-8.socket发送文件(jpg.gif.video)

贴上参考大神连接:

1.https://segmentfault.com/a/1190000016324980

2.https://www.jianshu.com/p/2a4b859e05df

(下边每一标号的其实改动不大,只不过我每天做一点,加一点功能,所以分开发了)

 

1.小试牛刀,客户端向服务器发送文件(一台机器测试)

这个比较简单 路径都是在程序设好的  先运行服务器 再运行客户端就行了  而且每次收到的文件格式都要在服务端修改 ,比较low

#server

import socket

s = socket.socket()
 
host = socket.gethostname()
port = 1234

s.bind((host, port))

s.listen(5)

clientsocket,addr = s.accept()
print('Got connection from', addr)

msg='Thank you for connecting...'
clientsocket.send(msg.encode('utf-8'))
    


dataPath = './'+'time.jpg'
fp = open(dataPath,'wb')
fp.close()
while True:
    data = clientsocket.recv(1024)
    if not data:
        break
    with open(dataPath, 'ab') as f:
        f.write(data)
print('recv finish') 
clientsocket.close()
    
import socket
import os.path


s = socket.socket()
 
host = socket.gethostname()
port = 1234
 
s.connect((host, port))#连接主机和端口

msg = s.recv(1024)
 
print(msg.decode('utf-8'))


while True:
    #filename =input('please input filePath_name:')
    filename = r'D:\python\video_jpg_gif\time.jpg'
    
    if os.path.exists(filename):
        with open(filename,'rb') as f:
            for data in f:
                s.send(data)
    else:
        print('file not exist')
    print('send finish')
    s.close()
    break

结果:

2.输入文件名(包含路径)(一台机器测试)

文件名输入之后 会自动提取文件名和格式,然后创建相同格式的文件

#server

import socket

s = socket.socket()
host = socket.gethostname()
port = 1234

s.bind((host, port))

s.listen(5)

clientsocket,addr = s.accept()
print('Got connection from', addr)

msg='Thank you for connecting...'
clientsocket.send(msg.encode('utf-8'))

filename = clientsocket.recv(1024).decode('utf-8')
print('filename is:',filename)

dataPath = './'+filename
fp = open(dataPath,'wb')
fp.close()

while True:
    data = clientsocket.recv(1024)
    if not data:
        break
    with open(dataPath, 'ab') as f:
        f.write(data)
print('recv finish') 
clientsocket.close()
import socket
import os.path


s = socket.socket()
 
host = socket.gethostname()
port = 1234
 
s.connect((host, port))#连接主机和端口

msg = s.recv(1024)
print(msg.decode('utf-8'))

filename =input('please input filePath_name:')
s.send(os.path.basename(filename).encode('utf-8'))

while True:
    
    if os.path.exists(filename):
        with open(filename,'rb') as f:
            for data in f:
                s.send(data)
    else:
        print('file not exist')
    print('send finish')
    s.close()
    break

结果:

如果是在不同机器测试:

只需要改动三行:

#服务器
host = '192.168.191.2'
port = 9826
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))

#客户端
host = '192.168.191.2'
port = 9826
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host, port))#连接主机和端口

3.服务器会一直开着,每次传输文件要运行一下客户端

#server
import socket
import threading


##host = '192.168.191.2'
##port = 9826
##s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s = socket.socket()
s.bind((socket.gethostname(), 9826))

s.listen(1)

while True:
    clientsocket,addr = s.accept()
    while True:
        filename = clientsocket.recv(1024).decode('utf-8')
        print('filename is:',filename)
        dataPath = './'+filename
        while True:
            data = clientsocket.recv(1024)
            if not data:
                print('not data')
                break
            with open(dataPath, 'ab') as f:
                f.write(data)
        print('recv finish')
        clientsocket.close()#关闭当前服务的客户端
        break

    

#client
import socket
import os.path


##host = '192.168.191.2'
##port = 9826
##s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s = socket.socket()
s.connect((socket.gethostname(), 9826))#连接主机和端口

while True:
    filename =input('please input filePath_name:')
    s.send(os.path.basename(filename).encode('utf-8'))
    while True:
        if os.path.exists(filename):
            with open(filename,'rb') as f:
                for data in f:
                    s.send(data)
        else:
            print('file not exist')
        print('send finish')
        s.close()
        break
        

4.把3做成了界面而已,不同电脑,wifi为中介

#server
import socket
import threading


host = '192.168.191.2'
port = 9826
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)

print('server open')

while True:
    clientsocket,addr = s.accept()
    while True:
        filename = clientsocket.recv(1024).decode('utf-8')
        print('filename is:',filename)
        dataPath = './'+filename
        while True:
            data = clientsocket.recv(1024)
            if not data:
                break
            with open(dataPath, 'ab') as f:
                f.write(data)
        print('recv finish')
        clientsocket.close()#关闭当前服务的客户端
        break

    

import socket
import os.path
from tkinter import *
from tkinter.scrolledtext import ScrolledText


win = Tk()  # 创建主窗口
win.title('文件传输工具')


host = '192.168.191.2'
port = 9826

var = StringVar()
def send_file():
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((host, port))#连接主机和端口
    filename =esend.get()
    s.send(os.path.basename(filename).encode('utf-8'))
    while True:
        if os.path.exists(filename):
            with open(filename,'rb') as f:
                for data in f:
                    s.send(data)
        else:
            var.set('file not exist')
        var.set('s')
        var.set('send finish')
        s.close()
        break
        

#下边是界面部分

lab = Label(win,textvariable = var)
lab.pack(side=BOTTOM, expand=True, fill=BOTH)


Label(win, text="输入文件路径").pack(side = LEFT)

esend = Variable()
entrySend = Entry(win, textvariable=esend).pack(side=LEFT)

Button(win, text="发送", command=send_file).pack(side = LEFT)

win.mainloop()

结果:

用法嘛,懂点中文都会哈哈

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值