利用udp方式,进行通信。
创建udp聊天界面:

不会创建的,请百度相关知识。

点击生成的python代码:

将其复制到wxudp。py;并且创建udpgb。py:

wxformbuilder生成的代码(wxudp.py):

# -*- coding: utf-8 -*-###########################################################################
# Python code generated with wxFormBuilder (version Jan 23 2018)
# http://www.wxformbuilder.org/
##
# PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################import wx
import wx.xrc###########################################################################
# Class denglu
###########################################################################class denglu (wx.Dialog):def __init__(self, parent):
wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(
369, 216),  style=wx.DEFAULT_DIALOG_STYLE)self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)bSizer1 = wx.BoxSizer(wx.VERTICAL)bSizer2 = wx.BoxSizer(wx.HORIZONTAL)self.m_staticText1 = wx.StaticText(
self, wx.ID_ANY, u"输入昵称:", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText1.Wrap(-1)
bSizer2.Add(self.m_staticText1, 0, wx.ALL |
wx.ALIGN_CENTER_VERTICAL, 5)self.m_nichen = wx.TextCtrl(
self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
bSizer2.Add(self.m_nichen, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)bSizer1.Add(bSizer2, 1, wx.EXPAND, 5)bSizer3 = wx.BoxSizer(wx.HORIZONTAL)self.m_staticText2 = wx.StaticText(
self, wx.ID_ANY, u"输入房间号:(0-50000)", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText2.Wrap(-1)
bSizer3.Add(self.m_staticText2, 0, wx.ALL |
wx.ALIGN_CENTER_VERTICAL, 5)self.m_fangjian = wx.TextCtrl(
self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
bSizer3.Add(self.m_fangjian, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)bSizer1.Add(bSizer3, 1, wx.EXPAND, 5)bSizer5 = wx.BoxSizer(wx.HORIZONTAL)self.m_button1 = wx.Button(
self, wx.ID_ANY, u"确定", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer5.Add(self.m_button1, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)self.m_button2 = wx.Button(
self, wx.ID_ANY, u"取消", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer5.Add(self.m_button2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)bSizer1.Add(bSizer5, 1, wx.EXPAND, 5)self.SetSizer(bSizer1)
self.Layout()self.Centre(wx.BOTH)# Connect Events
self.m_button1.Bind(wx.EVT_BUTTON, self.btn_ok)
self.m_button2.Bind(wx.EVT_BUTTON, self.btn_no)def __del__(self):
pass# Virtual event handlers, overide them in your derived class
def btn_ok(self, event):
event.Skip()def btn_no(self, event):
event.Skip()###########################################################################
# Class liaotian
###########################################################################class liaotian (wx.Frame):def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(
500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)bSizer7 = wx.BoxSizer(wx.VERTICAL)bSizer8 = wx.BoxSizer(wx.VERTICAL)self.m_msg = wx.TextCtrl(
self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
bSizer8.Add(self.m_msg, 1, wx.ALL | wx.EXPAND, 5)bSizer7.Add(bSizer8, 1, wx.EXPAND, 5)bSizer9 = wx.BoxSizer(wx.HORIZONTAL)self.m_staticText3 = wx.StaticText(
self, wx.ID_ANY, u"消息:", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText3.Wrap(-1)
bSizer9.Add(self.m_staticText3, 0, wx.ALL, 5)self.m_fasong = wx.TextCtrl(
self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
bSizer9.Add(self.m_fasong, 1, wx.ALL, 5)self.m_button3 = wx.Button(
self, wx.ID_ANY, u"发送", wx.DefaultPosition, wx.DefaultSize, 0)
bSizer9.Add(self.m_button3, 0, wx.ALL, 5)bSizer7.Add(bSizer9, 0, wx.EXPAND, 5)self.SetSizer(bSizer7)
self.Layout()self.Centre(wx.BOTH)# Connect Events
self.m_button3.Bind(wx.EVT_BUTTON, self.btn_fasong)def __del__(self):
pass# Virtual event handlers, overide them in your derived class
def btn_fasong(self, event):
event.Skip()

udpgb.py的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2018年12月23日@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2018-12-23'
import socket
import datetime
import threading
import wx
import jpyc.jcoding as jc
from udplte import wxudpe
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)class denglu(wxudpe.denglu):
def __init__(self):
wxudpe.denglu.__init__(self, None)
self.myname = None
self.myroom = None
self.m_button1.SetDefault()def __del__(self):
wxudpe.denglu.__del__(self)def btn_ok(self, event):
myname = self.m_nichen.GetValue().strip()  # 昵称
if not myname:
wx.MessageBox(u'昵称不能为空', u'错误信息', wx.OK | wx.ICON_ERROR)
self.m_nichen.SetBackgroundColour("red")
self.m_nichen.SetFocus()
return
else:
self.m_nichen.SetBackgroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
myroom = int(self.m_fangjian.GetValue())
if not myroom or myroom < 0 or myroom > 50000:
wx.MessageBox(u'房间号错误', u'错误信息', wx.OK | wx.ICON_ERROR)
self.m_fangjian.SetBackgroundColour("red")
self.m_fangjian.SetFocus()
return
else:
self.m_fangjian.SetBackgroundColour(
wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
self.myname = myname
self.myroom = myroom
self.Close()
event.Skip()def btn_no(self, event):
self.Close()
event.Skip()class liaotian(wxudpe.liaotian):
def __init__(self, nichen, fangjian):
wxudpe.liaotian.__init__(self, None)
self.myname = nichen
self.room = fangjianself.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.udp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.udp.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
self.udp.bind(('', 5000 + self.room))
self.udp.settimeout(1)
self.isalive = True
self.th = threading.Thread(target=self.recv1, args=())
self.th.setDaemon(True)
self.th.start()
self.m_fasong.SetFocus()def recv1(self):
try:
while self.isalive:
data, _ = self.udp.recvfrom(8192)
self.m_msg.AppendText(
u'%s\n' % jc.tounicode(datetime.datetime.now()))
self.m_msg.AppendText(u'%s\n\n' % jc.tounicode(data))
except:
pass
finally:
self.udp.close()def __del__(self):
wxudpe.liaotian.__del__(self)def send(self):
msg = self.m_fasong.GetValue().strip()
if not msg:
return
self.m_fasong.SetValue(u'')
msg = jc.toutf8(self.myname) + jc.toutf8(msg)
self.m_msg.AppendText(u'%s\n' % jc.tounicode(datetime.datetime.now()))
self.m_msg.AppendText(u'%s\n\n' % jc.tounicode(msg))
# ('255.255.255.255', 5000 + self.room)self.udp.sendto(msg, '255.255.255.255',  5000 + self.room)def btn_fasong(self, event):
self.send()
event.Skip()class MyApp(wx.App):
def OnInit(self):
room = denglu()
room.ShowModal()
myname = room.myname
myroom = room.myroom
if myname is None:
room.Destroy()
self.ExitMainLoop()
return True
self.chatmain = liaotian(myname, myroom)
self.chatmain.Show()
return Truedef OnExit(self):
self.chatmain.Destroy()if __name__ == "__main__":
app = MyApp()
app.MainLoop()

运行结果:

但还是会出现以下错误:

有能力的,可以去解决!

python版的UDP聊天(UI界面)相关推荐

  1. 如何用Python实现多任务版的udp聊天器

    这篇文章主要为大家详细介绍了Python实现多任务版的udp聊天器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.案例示例 二.案例说明 1.编写一个有2个线程的程 ...

  2. 鸿蒙os全新ui,华为工作人员:鸿蒙OS正式版将采用全新UI界面

    原标题:华为工作人员:鸿蒙OS正式版将采用全新UI界面 在发布会现场,华为展出了为演示鸿蒙 OS 特性而已经升级鸿蒙 OS 的华为手机.从体验上来看,这款手机在操作习惯.界面设计等方面与目前华为基于安 ...

  3. python制作天气预报软件(UI界面)

    接上一篇博客:https://blog.csdn.net/Henry41132220011/article/details/104631037 三.天气数据爬取(保存至本地excel表格中) 要实现断 ...

  4. Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

    目录 1.界面组件 1.1.布局组件(Layouts) 1.2.分隔组件(Spacers) 1.3.按钮组件(Buttons) 1.4.表项视图(Item Views) 1.5.表项组件(Item W ...

  5. 学习python+pycharm利用pyQt5生成UI界面

    今天学习并安装了pyQt5,现总结如下: 一.使用pycharm安装软件 路径:File->settings ->Project->Project Interpreter->点 ...

  6. 基于深度学习的人脸识别与管理系统(UI界面增强版,Python代码)

    摘要:人脸检测与识别是机器视觉领域最热门的研究方向之一,本文详细介绍博主自主设计的一款基于深度学习的人脸识别与管理系统.博文给出人脸识别实现原理的同时,给出Python的人脸识别实现代码以及PyQt设 ...

  7. 解决Python Socket UDP端口侦听线程内更新UI界面卡顿、奔溃的问题

    网络读卡器介绍:WIFI无线网络RFID云读卡器远程网络开关物流网NB-IoT4G刷卡阅读器-淘宝网 (taobao.com) Python使用PyQt5做UI界面,开启线程侦听UDP端口,端口接收到 ...

  8. python实现多人聊天udp_python—多任务版udp聊天机器人

    将多任务(多线程)引入到udp聊天机器人,可以实现同时发送消息和接收消息 1 import socket 2 import threading 3 4 5 def udp_send(udp_socke ...

  9. python 投票软件——含UI界面(优化版)

    相较于上一版本进行了细节上的优化,增强了程序的友好性,支持程序外部自定义投票范围 这是程序主体: import easygui from email.mime.text import MIMEText ...

最新文章

  1. 微信小程序tabBar
  2. 8.正交匹配跟踪 Orthogonal Matching Pursuit (OMP)s
  3. 云服务centos搭建jupyter notebook并通过外网访问
  4. make: warning:  Clock skew detected.  Your build may be incomplete.
  5. 正则表达式匹配中文字符串的文章URL
  6. 3-3:常见任务和主要工具之网络
  7. 如何在linux内核中读写文件
  8. pycharm新建python的快捷键_Python基础之PyCharm 的初始设置
  9. 小程序 移植 云开发_使用Kubernetes探索跨云的应用程序可移植性
  10. 深度相机_深度相机(TOF)的工作原理
  11. centosx64 6.2安装virtualbox
  12. spring mvc 上传文件
  13. 数据结构(王道计算机考研笔记)
  14. 【人话版】WEB3黑暗森林中的隐私博弈
  15. Hystrix原理介绍:服务雪崩、断路器、服务降级、资源隔离-《Spring Cloud微服务架构进阶》读书笔记
  16. matlab 符号运算 简化,Matlab 符号运算的因式分解、展开与合并、简化
  17. 前端Table用JS导出Excel数字自动变成科学计数法问题
  18. sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set的解决方案(linux)
  19. 服务器系统迁移服务收费,服务器数据库迁移也收费
  20. 4.20 扣1送地狱火

热门文章

  1. 什么是 ER 图,如何进行数据库规范化设计?
  2. 10个Python图像处理工具,非常全了!
  3. 大学生应该具备哪些计算机知识,大学生电脑知识是必备
  4. python画三维几何图形拼成的图案_Scratch3.0少儿编程案例:循环画窗花
  5. 关于matlab表情包,基于matlab人脸表情识别
  6. asp带验证码的用户登录及校验代码实现
  7. Recovery启动流程 --- 应用层到开机进入recovery详解
  8. Android ZXing 二维码、条形码扫描介绍
  9. 卷三十七 汉纪二十九
  10. 【杂记】NOIP前的挣扎『更新中』