之前给大家发过关于tcp控制访问以及文件传输的代码,这次是利用tkinter来传输,我写的不是特别好,请大家批评指正。
在Linux上面的代码我就不写了。若不知道的博友可以翻看我 python -- TCP "远程控制" 这篇文章。
#coding=utf-8
from tkinter import *
import socket
import time
from tkinter.scrolledtext import ScrolledText
from tkinter.filedialog import askopenfilename
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def clear():
ip.set("")
port.set("")
fileurl1.set("")
resulttext.delete(0,'end')
def choicefile():
global path
path = askopenfilename()
fileurl1.set(path)
def shangchuan():
cmd1 = "scwj"
c.send(bytes(cmd1,encoding="gbk")) #将命令转换后发送
print(path)
data = c.recv(1024)
print(str(data,encoding="utf8"))
filename = path.split("/")[-1]
print(filename)
c.send(bytes(filename,encoding="gbk"))
with open(path,"rb") as f:
fdata = f.read()
c.send(fdata)
data2 = c.recv(1024)
print(str(data2,encoding="utf8"))
def lianjie():
IP = ip.get()
PORT = port.get()
addr = (IP,PORT)
#print(addr)
c.connect(addr) #连接服务器
def tijiao():
cmd1 = cmd.get()
c.send(bytes(cmd1,encoding="gbk")) #将命令转换后发送
# if cmd == "byebye": #如果发送byby就退出连接
# break
ret = c.recv(20480)
print(str(ret,encoding="utf8")) #收到的信息显示
def main() :
root = Tk() #设定底板
global ip
ip = StringVar()
global port
port = IntVar()
global cmd
cmd = StringVar()
root.title("本地文件上传")
global fileurl1
fileurl1 = StringVar()
global resulttext
frame = Frame(root) #定义屏幕上的一块矩形区域
frame.pack(padx=8, pady=8, ipadx=5) #矩形区域摆放
iplabel = Label(frame,text="输入ip:",font="Helvetica -15 bold")
iplabel.grid(row=0, column=0, padx=5, pady=5, sticky="ne")
ipentry = Entry(frame,textvariable=ip,width=30)
ipentry.grid(row=0, column=1, sticky='ws', columnspan=1, padx=5, pady=5)
portlabel = Label(frame,text="输入端口:",font="Helvetica -15 bold") #文字标签字体
portlabel.grid(row=0, column=2, padx=5, pady=5, sticky="n") #网格划分其位置在第一行第一列 上下间隔5 靠西边
portentry = Entry(frame,textvariable=port,width=5) #输入框内容和值 宽度
portentry.grid(row=0, column=3, sticky='ew', columnspan=1, padx=5, pady=5)
ok = Button(frame,text="链接", default='active',command=lianjie) #定义按钮按下去就调用函数
ok.grid(row=0, column=4,padx=8, pady=5)
quitscan1 = Button(frame,text="本地文件选择", default='active',command=choicefile, width=10,height=1)
quitscan1.grid(row=1, column=3, padx=8, pady=5)
quitscan1= Button(frame,text="上传", default='active',command=shangchuan)
quitscan1.grid(row=1, column=4, padx=8, pady=5)
iplabe3 = Label(frame,text="本地文件路径:",font="Helvetica -15 bold")
iplabe3.grid(row=1, column=0, padx=5, pady=5, sticky="ne")
fileurl = Entry(frame,textvariable=fileurl1,width=30) #输入框内容和值 宽度
fileurl.grid(row=1, column=1, sticky='ew', columnspan=1, padx=5, pady=5)
resultlabel = Label(frame,text="命令输入界面:", font='Helvetica -15 bold')
resultlabel.grid(row=2, column=0, padx=5, pady=5, sticky=W,columnspan=2)
resulttext=Entry(frame,width=50,font=('Courier New', 13),fg='black',bg='white',textvariable=cmd)
#生成一个带滚动条的矿体第二行第一列 横跨4列
resulttext.grid(row=3,column=0,columnspan=5)
clearscan=Button(frame,text="清空", default='active',command=clear, width=8,height=1)
clearscan.grid(row=4, column=1,padx=8, pady=5)
quitscan= Button(frame,text="退出", default='active',command=quit, width=8,height=1)
quitscan.grid(row=4, column=3, padx=8, pady=5)
quitscan= Button(frame,text="命令提交", default='active',command=tijiao, width=8,height=1)
quitscan.grid(row=4, column=2, padx=8, pady=5)
root.geometry("600x400")
root.mainloop()
if __name__ == "__main__":
main()
c.close()
给打击截一下效果图
我觉得我最大的问题是命令输入界面不完善,大家可以告诉我哟~谢谢