QT UDP聊天小程序
利用QT的UDP技术,实现两个QT程序之间的聊天程序。
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QUdpSocket>
#include <QPushButton>
#include <QLineEdit>
#include <QTextBrowser>
#include <QLabel>
#include <QCloseEvent> class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = );
~Widget();
private:
QUdpSocket *udpsock;
QPushButton *btn1,*btn2,*btn3;
QLineEdit *edit1,*edit2,*edit3;
QLabel *label1,*label2,*label3;
QTextBrowser *text1;
void closeEvent(QCloseEvent *event);
private slots:
void mybindip();
void mysenddata();
void recvmydata();
}; #endif // WIDGET_H
#include "widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHostAddress>
#include <QMessageBox> Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("聊天室");
udpsock=new QUdpSocket(this);
//udpsock->bind(8080);
connect(udpsock,SIGNAL(readyRead()),this,SLOT(recvmydata()));
label1=new QLabel(tr("发送端口号:"));
edit1=new QLineEdit();
label2=new QLabel(tr("接收端口号:"));
edit2=new QLineEdit();
btn1=new QPushButton(tr("绑定"));
connect(btn1,SIGNAL(clicked()),this,SLOT(mybindip())); btn2=new QPushButton(tr("发送"));
connect(btn2,SIGNAL(clicked()),this,SLOT(mysenddata()));
label3=new QLabel(tr("消息内容:"));
edit3=new QLineEdit();
text1=new QTextBrowser(); QHBoxLayout *lay1=new QHBoxLayout();
lay1->addWidget(label1);
lay1->addWidget(edit1);
lay1->addWidget(label2);
lay1->addWidget(edit2);
lay1->addWidget(btn1); QHBoxLayout *lay2=new QHBoxLayout();
lay2->addWidget(label3);
lay2->addWidget(edit3);
lay2->addWidget(btn2);
QVBoxLayout *lay3=new QVBoxLayout(this);
lay3->addLayout(lay1);
lay3->addLayout(lay2);
lay3->addWidget(text1);
} //绑定接收端口号
void Widget::mybindip()
{
udpsock->close();
//获取接收端口号
QString port1=edit2->text();
if(port1.isEmpty())
{
QMessageBox::critical(this,"错误信息","发送端口号不可以为空!");
return ;
}
udpsock->bind(port1.toInt());
QMessageBox::information(this,"提示信息","绑定成功!端口号是"+port1);
} //发送消息
void Widget::mysenddata()
{
//获取发送端口号
QString port2=edit1->text();
if(port2.isEmpty())
{
QMessageBox::critical(this,"错误信息","发送端口号不可以为空!");
return ;
}
//获取发送内容
QString txt=edit3->text();
char buf[]={};
strcpy(buf,txt.toStdString().data());
//定义地址类
QHostAddress *serip=new QHostAddress();
serip->setAddress("127.0.0.1");
udpsock->writeDatagram(buf,strlen(buf),*serip,port2.toInt());
delete serip;
edit3->clear();
edit3->setFocus();
} //接收消息
void Widget::recvmydata()
{
QMessageBox::information(this,"提示信息","接收到消息");
char buf[]={};
while(udpsock->hasPendingDatagrams())
{
udpsock->readDatagram(buf,sizeof(buf));
text1->append(buf);
memset(buf,,sizeof(buf));
}
} //关闭
void Widget::closeEvent(QCloseEvent *event)
{
if(QMessageBox::information(this,"提示信息","确定要退出该程序?",QMessageBox::Yes|QMessageBox::No,QMessageBox::No)==QMessageBox::Yes)
{
event->accept();
}else
{
event->ignore();
}
} Widget::~Widget()
{ }

QT UDP聊天小程序的更多相关文章
- [Socket]Socket聊天小程序
一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...
- Netty 聊天小程序
这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...
- netty使用以及聊天小程序
<从零开始搭建游戏服务器>Netty导入创建Socket服务器 Netty入门教程 Netty 聊天小程序
- Netty学习——基于netty实现简单的客户端聊天小程序
Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...
- 类似微信聊天小程序-网易云信,IM DEMO小程序版本
类似微信聊天小程序-网易云信,IM DEMO小程序版本 代码地址: https://github.com/netease-im/NIM_Web_Weapp_Demo 云信IM DEMO 小程序版本 ( ...
- 基于JAVA网络编程的聊天小程序
package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...
- java 网络编程(四)----UDP进阶篇聊天小程序
设计要求:单线程模式,客户端只发送数据,数据的来源为键盘录入,服务器端只接收数据,当客户端发送886的时候,客户端和服务器端都退出. 1. 发送端: public class Send impleme ...
- 用Socket编写的聊天小程序
Socket是什么? 是套接字,除此之外我也不太清楚,先略过 直接上实例,首先服务端: ; //自定义端口号 private string ServerUser = "Tracy" ...
- python实现简单的聊天小程序
概要 这是一个使用python实现一个简单的聊天室的功能,里面包含群聊,私聊两种聊天方式.实现的方式是使用套接字编程的一个使用TCP协议 c/s结构的聊天室 实现思路 x01 服务端的建立 首先,在服 ...
随机推荐
- IOS开发之音频--录音
前言:本篇介绍录音. 关于录音,这里提供更为详细的讲解网址:http://www.cnblogs.com/kenshincui/p/4186022.html#audioRecord ,并且该博客有更 ...
- OBST(Optimal Binary Tree最优二叉搜索树)
二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的 ...
- Eclipse下使用SVN版本控制
作者:朱先忠编译 转自天极[url]http://dev.yesky.com/356/2578856.shtml[/url] 简单介绍一些基本操作1.同步在Eclipse下,右击你要同步的工程-tea ...
- [oracle]数据库语言分类
一般来说,数据库语言可以分成以下5大类: 1.数据定义语言DDL(Data Definition Language),用于改变数据库结构,包括创建.修改和删除数据库对象.包括create(创建).al ...
- Linux SendMail发送邮件失败诊断案例(三)
一Linux服务器突然发送不出邮件,检查了很多地方都没有发现异常,检查/var/log/maillog发现如下具体信息: Apr 12 00:36:04 mylinux sendmail[4685]: ...
- [20140928]创建连接到MySQL的连接服务器
首先要安装 mysql odbc 然后 odbc下创建DSN,并且要在系统DSN下. 最后执行 exec sp_addlinkedserver @server= 'XY', --这是链 ...
- python之递归实现
一.递归函数 概念:递归算法是一种直接或者间接的调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略时,必须有 ...
- 使用eclipse查看源码的方法
打开eclipse,建立项目:Test,将struts2相关jar包导入到其中.在Package Explorer标签栏下操作. 如下图: 在此,以查阅struts2中,struts2-core-2. ...
- C# 多线程,论多核时代爱恨情仇
为什么要学习多线程? 2010年1月21日是10年某市公务员考试的报名截止日.因从下午2点开始,用于报名的北京市人事考试网瘫痪,原定于昨天下午5点截止的报名时间延迟至今天上午11点. 2011年3月1 ...
- android Timer使用方法
Timer属性:http://www.apihome.cn/api/java/Timer.html 声明创建: private Timer mTimer; protected void onCreat ...