import tkinter as tkimport tkinterscrolledtextimport socketimport threadingwin = tkTkwintitleTCP聊天服务器wingeometry500x320# ------------------------------------# msgArea : 消息字符串显示文本区# 插入消息到文本区末尾:msgAreai
import tkinter as tk import tkinter.scrolledtext import socket import threading
win = tk.Tk() win.title("TCP聊天客户端") win.geometry("500x320")
------------------------------------
msgArea : 消息(字符串)显示文本区
插入消息到文本区末尾:msgArea.insert(tkinter.END, string)
设置文本区可修改: msgArea['state'] = tkinter.NORMAL
设置文本区不可修改: msgArea['state'] = tkinter.DISABLED
msgvar = tk.StringVar(value = "hello") msgArea = tk.scrolledtext.ScrolledText(win,bg="white",state = tk.DISABLED) msgArea.place(x=10, y=10, width=480, height = 240)
------------------------------------
服务器IP、Port配置
host = "localhost" port = 8000 serverAddr = None clientSocket = None server = None
------------------------------------
sendvar = tk.StringVar(value = "") sendEntry = tk.Entry(win,textvariable = sendvar) sendEntry.place(x=10, y=260, width=380, height = 20)
发送数据 :
def send(): # 需完善代码 data = sendvar.get() bytes = data.encode("utf-8") clientSocket.send(bytes) sendvar.set("") data = ("本机(%s):\n"% host) + data + "\n\n" #在文本域中插入字符串 msgArea['state'] = tkinter.NORMAL msgArea.insert(tkinter.END,data) msgArea['state'] = tkinter.DISABLED
sendBtn = tk.Button(win,text="发送",command=send) sendBtn.place(x=410, y=260, width=80, height=20)
serverIPLabel = tk.Label(win,text="服务器") serverIPLabel.place(x=10, y=290, width=50, height=20)
服务器IP地址:自动获取、显示本机IP
serverIPVar = tk.StringVar(win, value=host) serverIPEntry = tk.Entry(win, textvariable=serverIPVar) serverIPEntry.place(x=80, y=290, width=100, height=20)
服务器Port端口:默认值,不可修改
serverPortVar = tk.StringVar(win, value = f"{port}") serverPortEntry = tk.Entry(win, textvariable=serverPortVar) serverPortEntry.place(x=200, y=290, width=60, height=20)
def recv(): while True: data = clientSocket.recv(1024) data = data.decode("utf-8") data = ("服务器(%s):\n"%serverAddr[0]) + data + "\n\n" #在文本域中插入字符串 msgArea['state'] = tkinter.NORMAL msgArea.insert(tkinter.END,data) msgArea['state'] = tkinter.DISABLED
--------------------------------------------------------------------------
创建线程,连接服务器
def netConn(): global host,serverAddr,clientSocket host = serverIPVar.get().strip() serverAddr = (host,port) #创建socket对象 clientSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接服务器
clientSocket.connect(serverAddr)
#接收
threading.Thread(target= recv).start()
def startNetConn(): # 创建线程去连接 threading.Thread(target=netConn).start()
connectBtn = tk.Button(win,text="连接",command=startNetConn) connectBtn.place(x=410, y=290, width=80, height=20)
------------------------------------
win.mainloop(
原文地址: https://www.cveoy.top/t/topic/fpp5 著作权归作者所有。请勿转载和采集!