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(

import tkinter as tkimport tkinterscrolledtextimport socketimport threadingwin = tkTkwintitleTCP聊天服务器wingeometry500x320# ------------------------------------# msgArea : 消息字符串显示文本区# 插入消息到文本区末尾:msgAreai

原文地址: https://www.cveoy.top/t/topic/fpp5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录