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 服务端的建立 首先,在服 ...
随机推荐
- PHP操作mysql数据库:[2]查询数据听语音
本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料 Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言 ...
- AngularJS 指令
AngularJS 指令 AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令 ng-app 指令定义了 AngularJS 应用程序的 根元素. ng-app 指 ...
- 【转发】NPAPI开发详解,Windows版
NPAPI开发详解,Windows版 9 jiaofeng601, +479 9人支持,来自Meteor.猪爪.hanyuxinting更多 .是非黑白 .Yuan Xulei.hyolin.Andy ...
- Linux:U盘安装Linux系统
前天一个同学找我帮忙安装Linux系统,没有光盘,也不想在虚拟机里安装,在此情况下,我就采用U盘方式来安装Linux系统了.又想到还有其他人可能也不会 使用U盘安装系统,这里就作一个简单的介绍. 1. ...
- php中文乱码问题
HTML中文乱码问题的解决方法. 比如有个index.html的页面(这里是指真正的静态页面,修改服务器的……伪静态的请看方案B) 1.在head标签里面加入这句 <head> <m ...
- python中mysqldb的用法
1.引入MySQLdb库 import MySQLdb 2.和数据库建立连接 conn=MySQLdb.connect(host="localhost",user="ro ...
- ORA-01858: 在要求输入数字处找到非数字字符
数据库 date 字段问题 insert into WK_RE_LE (DACL_FILE_ID,DACL_GROUP_ID,BDCDYH,DACL_LENGTH,ISVALID,DACL ...
- Linux JDK 安装
1,下载JDK(Linux版) 官网下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2, 建立java目录 ...
- Android 横竖屏切换小结
(自己体会:每次横竖屏自动切时都会run Activity的onCreate,即相当后重新进入Activity初始化一样:) 转自:http://www.cnblogs.com/franksunny/ ...
- android WebView网页浏览器
组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...