socket实战(实现多人聊天)

1 服务端窗口布局

import wx  # pip install wxpython
from socket import *
import threading
import time


class Server(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, id=101, title="某某的服务器", pos=wx.DefaultPosition, size=(400, 300))
        # 面板,将控件放在面板当中
        pl = wx.Panel(self)
        # 布局方向
        box = wx.BoxSizer(wx.VERTICAL)
        # 将布局管理器添加到面板
        pl.SetSizer(box)
        # 创建组件(控件位置)
        gl = wx.FlexGridSizer(wx.HORIZONTAL)
        start_server = wx.Button(pl, size=(180, 40), label="启动服务")
        close_server = wx.Button(pl, size=(180, 40), label="关闭服务")
        gl.Add(start_server, 1, wx.TOP)
        gl.Add(close_server, 1, wx.TOP)

        box.Add(gl, 1, wx.ALIGN_CENTER)
        pl.SetSizer(box)

        # 文本控件
        self.Interface = wx.TextCtrl(pl, size=(390, 240), style=wx.TE_MULTILINE | wx.TE_READONLY)
        box.Add(self.Interface, 2, wx.ALIGN_CENTER)
        pl.SetSizer(box)

if __name__ == '__main__':
    # 每一个wxpython应用程序都是wx.App的一个实例
    app = wx.App()
    Server().Show()
    # 处理各种事件
    app.MainLoop()

2 客户端窗口布局

import wx  # pip install wxpython
from socket import *
import threading
import time


class ChatRoom(wx.Frame):
    def __init__(self, k_name):
        wx.Frame.__init__(self, None, id=100, title="%s的界面" % k_name, pos=wx.DefaultPosition, size=(400, 500))
        pl = wx.Panel(self)
        box = wx.BoxSizer(wx.VERTICAL)
        # 将布局管理器添加到面板
        pl.SetSizer(box)
        # 创建组件
        gl = wx.FlexGridSizer(wx.HORIZONTAL)
        connect_server = wx.Button(pl, size=(180, 40), label="连接服务器")
        break_server = wx.Button(pl, size=(180, 40), label="断开服务器")
        gl.Add(connect_server, 1, wx.TOP | wx.LEFT)
        gl.Add(break_server, 1, wx.TOP | wx.RIGHT)
        box.Add(gl, 1, wx.ALIGN_CENTER)

        # 文本框
        self.Interface = wx.TextCtrl(pl, size=(390, 240), style=wx.TE_MULTILINE | wx.TE_READONLY)
        box.Add(self.Interface, 2, wx.ALIGN_CENTER)
        # 输入框
        self.input_data = wx.TextCtrl(pl, size=(390, 100), style=wx.TE_MULTILINE)
        box.Add(self.input_data, 2, wx.ALIGN_CENTER)

        # 底部按钮
        gl2 = wx.FlexGridSizer(wx.HORIZONTAL)
        clear = wx.Button(pl, size=(180, 40), label="清空")
        send = wx.Button(pl, size=(180, 40), label="发送")
        gl2.Add(clear, 1, wx.TOP | wx.LEFT)
        gl2.Add(send, 1, wx.TOP | wx.RIGHT)
        box.Add(gl2, 1, wx.ALIGN_CENTER)
        pl.SetSizer(box)


if __name__ == '__main__':
    # 每一个wxpython应用程序都是wx.App的一个实例
    app = wx.App()
    name = input("请输入客户端的名称:")
    ChatRoom(name).Show()
    # 处理各种事件
    app.MainLoop()

3 定义服务器属性

# 定义服务器本身的属性
self.isON = False  # 代表服务器是否启动
self.host_port = ("", 8899)  # 绑定ip和端口
self.server_socket = socket(AF_INET, SOCK_STREAM)
self.server_socket.bind(self.host_port)
self.server_socket.listen(5)
# 创建空字典,存放服务器会话线程
self.session_thread_map = {}

# 注入灵魂(绑定事件)
self.Bind(wx.EVT_BUTTON, self.start_server, start_up)
self.Bind(wx.EVT_BUTTON, self.close_server, close_up)

4 定义客户端属性

self.Bind(wx.EVT_BUTTON,self.connect_to_server,connect_server)
self.Bind(wx.EVT_BUTTON,self.break_to_server,break_server)
self.Bind(wx.EVT_BUTTON,self.send_to_data, send)
self.Bind(wx.EVT_BUTTON, self.clear_to_data, clear)


self.name = k_name
self.isConnect = False
self.client_socket = None
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大杯奶绿加少冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值