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_UITableView性能优化那些事
UITableView在实际开发中使用频率实在是很高, 因此, UITableView的性能优化是必不可少的, 本文下面就略微总结一下UITableView性能优化那些事. 本文着重介绍具体方法, 原 ...
- ThinkPHP 空方法 显示
TP如果 一个控制器 没有一个方法 ,只要有一个模版,URL会对应显示模版名称. 例子 http://localhost/yiyunmap/map/test map控制器 并没有 test方法 但是 ...
- git diff的用法
在git提交环节,存在三大部分:working tree(工作区), index file(暂存区:stage), commit(分支:master) working tree:就是你所工作在的目录, ...
- 清除ASPX页面中的meta:resourceKey="[a-zA-Z0-9]+"
在替换对话框中,选中“使用正则表达式”, 被替换内容,使用 meta:resourceKey="[a-zA-Z0-9]+" 然后替换整个文档就可以了.
- 用SQL语句建库建表建约束(用SQl语句在指定盘符创建文件夹)
一 :创建数据库 创建一个数据文件和一个日志文件(MySchool) create database MySchoolon primary --默认属于primary主文件组,可省略(--数 ...
- Mongodb Manual阅读笔记:CH3 数据模型(Data Models)
3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...
- Java api 入门教程 之 JAVA的文件操作
I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...
- C#设计模式(21)——责任链模式
一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所 ...
- Getaddrinfo()笔记
WSADATA dwRetval; if (WSAStartup(MAKEWORD(2,2),&dwRetval)!=0) //开启Socket { printf("WSAStart ...
- union all 与order by的连用
昨天工作过程中发现一个奇怪的地方: 代码段A: 1---select * from table1 2---order by no 3---union all 4---select * ...