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()

最新文章

  1. C#初学单例模式
  2. canvas初探1
  3. this指向
  4. java-io-FileInputStream与FileOutputStream类
  5. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
  6. Linux 网卡驱动设备程序设计(1)
  7. 走进C++程序世界-----继承和派生(2)
  8. 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
  9. Android中的shape
  10. SEO的基本概念 和 提交SITEMAP到搜索引擎
  11. 【JVM】JVM垃圾收集器、垃圾收集算法、无用对象
  12. VS Code 1.18版本更新内容整理(2017年10月 October 2017)
  13. npm jspdf报错
  14. SQL Server - NOLOCK
  15. Springboot:开发时工程启动慢
  16. YUICompressor的安装及使用(一)
  17. 【教程】ubuntu下安装NFS服务器
  18. 调整iRedmail之Roundcube webmail服务不可不知的几件事
  19. SQL锁机制和事务隔离级别
  20. 2018.09.01 loj#2330. 「清华集训 2017」榕树之心(树形dp)

热门文章

  1. reactiveCocoa使用
  2. Lab 5-1
  3. You Don&#39;t Know JS: Async &amp; Performance(第3章, Promises)(未看)
  4. You Don&#39;t Know JS: this &amp; Object Prototypes( 第5章 Prototypes)
  5. bzoj2431
  6. bzoj2555: SubString sam+lct
  7. spring中集成shiro
  8. React文档(一)安装
  9. hdu-3671-tarjin/割点方案
  10. CSS3透明背景+渐变样式