用python编写简单的通信程序SMI开源

我这个人

就痴迷加密通信

所以我开始编写一个通信程序SMI

目前只是做了通信

没进行加密

其实好久之前我就开始编写这个程序,

只是因为时间问题,

修改的次数很少

目前只知道几处bug

如果您发现了我没发现的bug

请您指正

哦对了

等到程序编写的比较成熟

我会买一台服务器用来运行主程序

并用htlm建立一个官网

到时候希望多多支持

 

import tkinter as tk
import tkinter.messagebox
import socket
import datetime
import os
import threading
import time

def analyze_and_build(raw):
    rawlist=raw.decode('utf-8').split('-$-')
    method=rawlist[0]
    if method=='n':
        time=datetime.datetime.fromtimestamp(float(rawlist[1])).strftime('%Y-%m-%d %H:%M:%S')
        name=rawlist[2]
        content=rawlist[3]
        return '%s\n%s : %s\n\n' % (time,name,content)
    elif method=='e':
        time=datetime.datetime.fromtimestamp(float(rawlist[1])).strftime('%Y-%m-%d %H:%M:%S')
        name=rawlist[2]
        return '%s\n%s加入了聊天\n\n' % (time,name)
        lts.append(name)
        

    elif method=='q':
        name=rawlist[1]

        return '%s退出了聊天\n\n' % name
 

def mainview():
    name=nameEntry.get()
    host=hostEntry.get()
    port=portEntry.get()
    if name=='' or host=='' or port=='':
        tkinter.messagebox.showinfo(title='提示',message='你貌似有信息没填')
    
    elif name == "陈雨":
        while name == "陈雨":
            print("SyntaxError: unexpected character after line continuation character")
            print("您的气场已将服务器催毁")
    elif name == "midikafeijiren" :
        print("已将最高权限交给您")


    else:
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.connect((host,int(port)))

      
        loginWindow.destroy()
        mainWindow=tk.Tk()
        mainWindow.title('聊天室(%s)' % name)
        mainWindow.geometry('440x390')

        showText=tk.Text(mainWindow,height=20,width=60)
        emptyLabel=tk.Label(mainWindow,height=1)
        writeText=tk.Text(mainWindow,height=4,width=60)
        showText.tag_config('red',foreground='red')


        showText.pack()
        emptyLabel.pack()
        writeText.pack()


        s.send(('e-$-%s-$-%s' % (datetime.datetime.now().timestamp(),name)).encode('utf-8'))

        def fresh():
            while True:
                data=s.recv(1024)
                rawlist=data.decode('utf-8').split('-$-')
                if (rawlist[0]=='n' or rawlist[0]=='e') and rawlist[2]==name:
                    showText.insert('end',analyze_and_build(data),'red')
                else:
                    showText.insert('end',analyze_and_build(data))
                showText.see('end')

        t1=threading.Thread(target=fresh)
        t1.start()

        def send_message():
            data=writeText.get('0.0','end')
            if data=='\n':
                pass
            else:
                s.send(('n-$-%s-$-%s-$-%s' % (datetime.datetime.now().timestamp(),name,data)).encode('utf-8'))
                writeText.delete('0.0','end')

        sendButton=tk.Button(mainWindow,text='发送',width=5,height=1,command=send_message)
        sendButton.pack()

        def quit():
            s.send(('q-$-%s' % name).encode('utf-8'))
            time.sleep(0.5)
            s.send('_quitchatroom'.encode('utf-8'))
            mainWindow.destroy()
            os._exit(0)

        mainWindow.protocol('WM_DELETE_WINDOW',quit)
        mainWindow.mainloop()








loginWindow=tk.Tk()
loginWindow.title('客户')
loginWindow.geometry('300x340')

loginLabel=tk.Label(loginWindow,
    text='加密通信',
    font=('Arial',15),
    width=10,height=2)

nameLabel=tk.Label(loginWindow,
    text='姓名:',
    font=('Arial',10),
    width=6,height=1)

hostLabel=tk.Label(loginWindow,
    text='服务器ip:',
    font=('Arial',10),
    width=6,height=1)

portLabel=tk.Label(loginWindow,
    text='端口号:',
    font=('Arial',10),
    width=6,height=1)

opLabel=tk.Label(loginWindow,
    text='开发者账号:',
    font=('Arial',11),
    width=10,height=1)

kgLabel=tk.Label(loginWindow,
    text='                   ',
    font=('Arial',10),
    width=6,height=1)
kg2Label=tk.Label(loginWindow,
    text='                   ',
    font=('Arial',10),
    width=6,height=1)

nameEntry=tk.Entry(loginWindow)
hostEntry=tk.Entry(loginWindow)
portEntry=tk.Entry(loginWindow)
opEntry=tk.Entry(loginWindow)

opButton=tk.Button(loginWindow,
    text='确定',
    width=10,
    height=1,
    command=mainview)

loginLabel.pack()
nameLabel.pack()
nameEntry.pack()
hostLabel.pack()
hostEntry.pack()
portLabel.pack()
portEntry.pack()

kg2Label.pack()
opButton.pack()

这其中加入了一些我的主观色彩

比如

elif name == "陈雨":
        while name == "陈雨":
            print("SyntaxError: unexpected character after line continuation character")
            print("您的气场已将服务器催毁")
    elif name == "midikafeijiren" :
        print("已将最高权限交给您")

当然

这并不影响客户端的正常运行

并且

在包装成软件前我会将其删除

那么接下来

我说一说我发现的bug

1.没有限制输入的字节数

会导致程序未响应和服务器崩溃

2.我实在是只发现了这条

如果你发现了其他的bug

请在评论区告诉我

你可能感兴趣的:(python通信,python,服务器)