1.6socket服务器传送文件--gui窗口
2024-10-15 15:37:22
socket服务器代码
import sys,os,time,_thread
from 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,_thread
from socket import *
from tkinter import *
from tkinter.messagebox import showinfo class 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('<Return>',(lambda event:onSunbmit(content)))
mainloop() main()
最新文章
- C#初学单例模式
- canvas初探1
- this指向
- java-io-FileInputStream与FileOutputStream类
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
- Linux 网卡驱动设备程序设计(1)
- 走进C++程序世界-----继承和派生(2)
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- Android中的shape
- SEO的基本概念 和 提交SITEMAP到搜索引擎
- 【JVM】JVM垃圾收集器、垃圾收集算法、无用对象
- VS Code 1.18版本更新内容整理(2017年10月 October 2017)
- npm jspdf报错
- SQL Server - NOLOCK
- Springboot:开发时工程启动慢
- YUICompressor的安装及使用(一)
- 【教程】ubuntu下安装NFS服务器
- 调整iRedmail之Roundcube webmail服务不可不知的几件事
- SQL锁机制和事务隔离级别
- 2018.09.01 loj#2330. 「清华集训 2017」榕树之心(树形dp)
热门文章
- reactiveCocoa使用
- Lab 5-1
- You Don&#39;t Know JS: Async &; Performance(第3章, Promises)(未看)
- You Don&#39;t Know JS: this &; Object Prototypes( 第5章 Prototypes)
- bzoj2431
- bzoj2555: SubString sam+lct
- spring中集成shiro
- React文档(一)安装
- hdu-3671-tarjin/割点方案
- CSS3透明背景+渐变样式