python网络编程TCP。。。

直接上代码,是用tk的GUI写的

两个tk同时运行,先填写端口号,那个port区域,然后就可以发消息啦,在那个send区域写,点击send按钮发送

# -*- coding:utf-8 -*-
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()
        # 用来初始化tcp
        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
            # if len(self.str_input.get()) == 0:
            #     server_str = 'hello i am server...'
            # else:

        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()
            # self.tcplink(sock, addr)

    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()
# -*- coding:utf-8 -*-
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()
        # 用来初始化tcp
        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()

运行结果:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/abc15766228491/article/details/80233769