博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.6socket服务器传送文件--gui窗口
阅读量:5015 次
发布时间:2019-06-12

本文共 2902 字,大约阅读时间需要 9 分钟。

socket服务器代码

import sys,os,time,_threadfrom socket import *class Server(object):    def __init__(self):                      #用于初始化端口和IP        self.host = 'localhost'        self.port = 50001        self.server()    def now(self):                           #返回当前时间           return time.asctime()    def server_thread(self,conn):            #多线程运行服务器        sockfile = conn.makefile('r')        filename = sockfile.readline()[:-1]        try:  # 读取文件内容,并传输            file = open(filename, 'rb')            while True:                bytes = file.read(1024)                if not bytes: break                sent = conn.send(bytes)                assert sent == len(bytes)        except:            print('Error downloading file on server:', filename)        conn.close()    def server(self):                         #开启线程        sock = socket(AF_INET, SOCK_STREAM)        sock.bind((self.host, self.port))        sock.listen(5)        while True:            conn, addr = sock.accept()            print('Server connect by', addr, 'at', self.now())            _thread.start_new_thread(self.server_thread, (conn,))  Server()

 

socket客户端代码

利用tkinter打印出界面,在界面内设置IP端口和文件,并设置提交函数

import sys,os,time,_threadfrom socket import *from tkinter import *from tkinter.messagebox import showinfoclass Client(object):    def __init__(self):        pass    def now(self):        return time.asctime()    def client(self,host,port,filename):               #客户端运行        sock = socket(AF_INET, SOCK_STREAM)        sock.connect((host, port))        sock.send((filename + '\n').encode())        dropdir = 'New ' + os.path.split(filename)[1]  # 获取文件地址,保存在默认目录下        file = open(dropdir, 'wb')                     # 创建本地文件        while True:            data = sock.recv(1024)            if not data: break            file.write(data)                           # 储存数据        sock.close()        file.close()        print('Client got ',filename, 'at', self.now())def onSunbmit(content):                                #定义按钮的函数    host = content['Server'].get()    port = int(content['Port'].get())    filename = content['File'].get()        Client.client(Client(),host,port,filename)    showinfo('Get-File','Download complete')def main():                                            #利用tkinter设置GUI界面    box = Tk()    labels = ['Server', 'Port', 'File']    rownum = 0    content = {}    for label in labels:        Label(box, text=label).grid(column=0, row=rownum)        entry = Entry(box)        entry.grid(column=1, row=rownum, sticky=E + W)        content[label] = entry        rownum += 1    box.columnconfigure(0, weight=0)    box.columnconfigure(1, weight=1)    Button(text='Submit', command=lambda :onSunbmit(content)).grid(row=rownum,column=0,columnspan=2)    box.title('Get——File')    box.bind('
',(lambda event:onSunbmit(content))) mainloop()main()

 

转载于:https://www.cnblogs.com/fg2312/p/7611924.html

你可能感兴趣的文章
HTML CSS 层叠样式表 三
查看>>
Qt pro pri 文件学习1
查看>>
【iOS】UICollectionView自己定义Layout之蜂窝布局
查看>>
发布aar到jcenter
查看>>
跨浏览器问题的五种解决方案
查看>>
Linux查看进程的内存占用情况 分类: ubuntu ...
查看>>
[BZOJ 2818]Gcd
查看>>
160. Intersection of Two Linked Lists
查看>>
ehcache memcache redis 三大缓存男高音_转
查看>>
.Net Core AES加密解密
查看>>
python | 桶排序、冒泡排序、选择排序、去重
查看>>
Mac升级bash到最新版本
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
simple java mail
查看>>
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>