LET CHAT1.1v 重磅更新!!!——TCP通信

这次的更新修复了以下问题:

1、不能在两个电脑之间通信再新增了服务器IP登录选项(如localhost和127.0.0.1)

2、邮件不清晰加上了分隔线

代码如下:

import tkinter
from tkinter.font import Font
from tkinter.ttk import *
from socket import socket,AF_INET,SOCK_DGRAM
from socketserver import BaseRequestHandler,TCPServer
from tkinter.scrolledtext import *
from threading import Thread
def listen():
    server=TCPServer((ip,output),Chat)
    server.serve_forever()
def login():
    global logintext,yesbt,nameen,name,root,outputen,output,outputtext,ip,ipen
    name=nameen.get()
    logintext.config(text=f"Hello,{name}")
    sendbt=tkinter.Button(root,text="send",command=Mailbox)
    nameen.pack_forget()
    outputen.pack_forget()
    yesbt.pack_forget()
    outputtext.pack_forget()
    ipen.pack_forget()
    iptext.pack_forget()
    guibt=tkinter.Button(root,text="GUI",command=gui)
    sendbt.pack()
    guibt.pack()
    output=int(outputen.get())
    ip=ipen.get()
    Thread(target=listen).start()
class Chat(BaseRequestHandler):
    def handle(self):
        global mail
        msg,sock=self.request
        mail.append(msg)
class Mailbox():
    def __init__(self):
        global screen,mailtext,toen,ipen2
        screen=tkinter.Toplevel()
        screen.geometry("400x450")
        fromtext=tkinter.Label(screen,text=f"From:{name}\noutput:{output}\nip:")
        totext=tkinter.Label(screen,text="To output:")
        toen=tkinter.Entry(screen)
        ipen2=tkinter.Entry(screen)
        mailtext=tkinter.Text(screen)
        yesbt2=tkinter.Button(screen,text="OK",command=self.send)
        fromtext.pack()
        ipen2.pack()
        totext.pack()
        toen.pack()
        mailtext.pack()
        yesbt2.pack()
    def send(self):
        server2=socket(AF_INET,SOCK_DGRAM)
        text=f"from:{name}\noutput:{output}\nip:{ip}\n****************************\n"+mailtext.get("1.0",tkinter.END)+"------------------------------\n"
        server2.sendto(text.encode(),("localhost",int(toen.get())))
        screen.destroy()
def gui():
    global mail,guitext
    guiw=tkinter.Toplevel()
    guitext=ScrolledText(guiw,undo=True)
    guibt2=tkinter.Button(guiw,text="Refresh",command=refresh_gui)
    refresh_gui()
    guibt2.pack()
def refresh_gui():
    for m in mail:
        guitext.insert(tkinter.END,m)
    guitext.pack()
if __name__ == "__main__":
    mail=[]
    root=tkinter.Tk()
    root.title("LetChat")
    root.geometry("400x200")
    titletext=tkinter.Label(root,text="Let Chat")
    titletext.config(font=Font(size=30))
    logintext=tkinter.Label(root,text="login")
    outputtext=tkinter.Label(root,text="output(8000<=output<=25000)")
    iptext=tkinter.Label(root,text="IP:")
    ipen=tkinter.Entry(root)
    nameen=tkinter.Entry(root)
    yesbt=tkinter.Button(root,text="yes",command=login)
    outputen=tkinter.Entry(root)
    titletext.pack()
    logintext.pack()
    nameen.pack()
    outputtext.pack()
    outputen.pack()
    iptext.pack()
    ipen.pack()
    yesbt.pack()

灵感如下:
Python两台电脑实现TCP通信_python tcp-CSDN博客

造福一下没登录的同志!!!awa

import tkinter
from tkinter.font import Font
from tkinter.ttk import *
from socket import socket,AF_INET,SOCK_DGRAM
from socketserver import BaseRequestHandler,TCPServer
from tkinter.scrolledtext import *
from threading import Thread
def listen():
    server=TCPServer((ip,output),Chat)
    server.serve_forever()
def login():
    global logintext,yesbt,nameen,name,root,outputen,output,outputtext,ip,ipen
    name=nameen.get()
    logintext.config(text=f"Hello,{name}")
    sendbt=tkinter.Button(root,text="send",command=Mailbox)
    nameen.pack_forget()
    outputen.pack_forget()
    yesbt.pack_forget()
    outputtext.pack_forget()
    ipen.pack_forget()
    iptext.pack_forget()
    guibt=tkinter.Button(root,text="GUI",command=gui)
    sendbt.pack()
    guibt.pack()
    output=int(outputen.get())
    ip=ipen.get()
    Thread(target=listen).start()
class Chat(BaseRequestHandler):
    def handle(self):
        global mail
        msg,sock=self.request
        mail.append(msg)
class Mailbox():
    def __init__(self):
        global screen,mailtext,toen,ipen2
        screen=tkinter.Toplevel()
        screen.geometry("400x450")
        fromtext=tkinter.Label(screen,text=f"From:{name}\noutput:{output}\nip:")
        totext=tkinter.Label(screen,text="To output:")
        toen=tkinter.Entry(screen)
        ipen2=tkinter.Entry(screen)
        mailtext=tkinter.Text(screen)
        yesbt2=tkinter.Button(screen,text="OK",command=self.send)
        fromtext.pack()
        ipen2.pack()
        totext.pack()
        toen.pack()
        mailtext.pack()
        yesbt2.pack()
    def send(self):
        server2=socket(AF_INET,SOCK_DGRAM)
        text=f"from:{name}\noutput:{output}\nip:{ip}\n****************************\n"+mailtext.get("1.0",tkinter.END)+"------------------------------\n"
        server2.sendto(text.encode(),("localhost",int(toen.get())))
        screen.destroy()
def gui():
    global mail,guitext
    guiw=tkinter.Toplevel()
    guitext=ScrolledText(guiw,undo=True)
    guibt2=tkinter.Button(guiw,text="Refresh",command=refresh_gui)
    refresh_gui()
    guibt2.pack()
def refresh_gui():
    for m in mail:
        guitext.insert(tkinter.END,m)
    guitext.pack()
if __name__ == "__main__":
    mail=[]
    root=tkinter.Tk()
    root.title("LetChat")
    root.geometry("400x200")
    titletext=tkinter.Label(root,text="Let Chat")
    titletext.config(font=Font(size=30))
    logintext=tkinter.Label(root,text="login")
    outputtext=tkinter.Label(root,text="output(8000<=output<=25000)")
    iptext=tkinter.Label(root,text="IP:")
    ipen=tkinter.Entry(root)
    nameen=tkinter.Entry(root)
    yesbt=tkinter.Button(root,text="yes",command=login)
    outputen=tkinter.Entry(root)
    titletext.pack()
    logintext.pack()
    nameen.pack()
    outputtext.pack()
    outputen.pack()
    iptext.pack()
    ipen.pack()
    yesbt.pack()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值