直接上代码,是用tk的GUI写的
两个tk同时运行,先填写端口号,那个port区域,然后就可以发消息啦,在那个send区域写,点击send按钮发送
import tkinter as tk
import socket
import threading
import time
class APP:
def __init__(self, master):
self.LabelFrame1 = tk.LabelFrame(master, text="sever", width=200, height=200)
self.LabelFrame10 = tk.LabelFrame(self.LabelFrame1, text='info')
self.LabelFrame01 = tk.LabelFrame(self.LabelFrame10, text='port')
self.Entry_port = tk.Entry(self.LabelFrame01)
self.Entry_port.pack(side='left')
self.button_port = tk.Button(self.LabelFrame01, text='set', command=self.get_port)
self.button_port.pack(side='right')
self.LabelFrame01.pack(side='left')
self.LabelFrame11 = tk.LabelFrame(self.LabelFrame10, text='send')
self.Entry_send = tk.Entry(self.LabelFrame11)
self.Entry_send.pack(side='left')
self.button = tk.Button(self.LabelFrame11, text='send', command=self.set_send)
self.button.pack(side='right')
self.LabelFrame11.pack(side='right')
self.LabelFrame10.pack()
self.LabelFrame12 = tk.LabelFrame(self.LabelFrame1, text='dia', width=200, height=200)
self.text = tk.Text(self.LabelFrame12, height=40, width=100)
self.text.pack()
self.LabelFrame12.pack()
self.LabelFrame1.pack()
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def tcplink(self, sock, addr):
self.sock = sock
print('Accpte from{}'.format(addr))
self.sock.send('Welcome....'.encode('ascii'))
while True:
data = self.sock.recv(1024)
print('client says: {}'.format(data.decode('ascii')))
self.text.insert(tk.END, 'client says {}\n'.format(data.decode('ascii')))
if data == 'exit' or not data:
break
self.sock.close()
print('connection close')
def get_new_t(self):
str_view = tk.StringVar()
str_view.set(self.Entry_port.get())
self.socket.bind(('127.0.0.1', int(str_view.get())))
self.socket.listen(5)
wait = 'Waitting for connecting....'+'\n'
self.text.insert(tk.END, wait)
while True:
sock, addr = self.socket.accept()
t = threading.Thread(target=self.tcplink, args=(sock, addr))
t.start()
def get_port(self):
t = threading.Thread(target=self.get_new_t)
t.start()
def set_send(self):
self.str_input = tk.StringVar()
self.str_input.set(self.Entry_send.get())
server_str = self.str_input.get()
self.sock.send(server_str.encode('ascii'))
self.text.insert(tk.END, 'my say:'+server_str+'\n')
root = tk.Tk()
root.title('sever')
display=APP(root)
root.mainloop()
import tkinter as tk
import socket
import threading
import time
class APP:
def __init__(self, master):
self.LabelFrame1 = tk.LabelFrame(master, text="client", width=200, height=200)
self.LabelFrame10 = tk.LabelFrame(self.LabelFrame1, text='info')
self.LabelFrame01 = tk.LabelFrame(self.LabelFrame10, text='port')
self.Entry_port = tk.Entry(self.LabelFrame01)
self.Entry_port.pack(side='left')
self.button_port = tk.Button(self.LabelFrame01, text='set', command=self.get_port)
self.button_port.pack(side='right')
self.LabelFrame01.pack(side='left')
self.LabelFrame11 = tk.LabelFrame(self.LabelFrame10, text='send')
self.Entry_send = tk.Entry(self.LabelFrame11)
self.Entry_send.pack(side='left')
self.button = tk.Button(self.LabelFrame11, text='send', command=self.set_send)
self.button.pack(side='right')
self.LabelFrame11.pack(side='right')
self.LabelFrame10.pack()
self.LabelFrame12 = tk.LabelFrame(self.LabelFrame1, text='dia', width=200, height=200)
self.text = tk.Text(self.LabelFrame12, height=40, width=100)
self.text.pack()
self.LabelFrame12.pack()
self.LabelFrame1.pack()
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def get_new_t(self):
str_view = tk.StringVar()
str_view.set(self.Entry_port.get())
self.socket.connect(('127.0.0.1', int(str_view.get())))
recv = self.socket.recv(1024)
self.text.insert(tk.END, recv.decode('ascii')+'\n')
while True:
recv = 'server says: {}\n'.format(self.socket.recv(1024).decode('ascii'))
self.text.insert(tk.END, recv)
def get_port(self):
t = threading.Thread(target=self.get_new_t)
t.start()
def set_send(self):
self.str_input = tk.StringVar()
self.str_input.set(self.Entry_send.get())
client_str = self.str_input.get()
self.socket.send(client_str.encode('ascii'))
self.text.insert(tk.END, 'my say:'+client_str+'\n')
root = tk.Tk()
root.title('client')
display=APP(root)
root.mainloop()
运行结果: