简单Qt网络通信

最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信。

1.UDP通信

UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端。 注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能

1.1.UDP发送端

 1 #include <QtNetwork>
 2 QUdpSocket *sender;
 3 sender = new QUdpSocket(this);
 4 QByteArray datagram = “hello world!”;
 5 //UDP广播
 6 sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,6665);
 7 //向特定IP发送
 8 QHostAddress serverAddress = QHostAddress("10.21.11.66");
 9 sender->writeDatagram(datagram.data(), datagram.size(),serverAddress, 6665);
10 /* writeDatagram函数原型,发送成功返回字节数,否则-1
11 qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)
12 qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)
13 */
 

1.2.UDP接收端

 1 #include <QtNetwork>
 2 QUdpSocket *receiver;
 3 //信号槽
 4 private slots:
 5 void readPendingDatagrams();
 6 receiver = new QUdpSocket(this);
 7 receiver->bind(QHostAddress::LocalHost, 6665);
 8 connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
 9 void readPendingDatagrams()
10 {
11 while (receiver->hasPendingDatagrams()) {
12 QByteArray datagram;
13 datagram.resize(receiver->pendingDatagramSize());
14 receiver->readDatagram(datagram.data(), datagram.size());
15 //数据接收在datagram里
16 /* readDatagram 函数原型
17 qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)
18 */
19 }
20 }

2.TCP通信

TCP的话要复杂点,必须先建立连接才能传输数据,分为server端和client端。

2.1.TCP client端

1 #include <QtNetwork>
2 QTcpSocket *client;
3 char *data="hello qt!";
4 client = new QTcpSocket(this);
5 client->connectToHost(QHostAddress("10.21.11.66"), 6665);
6 client->write(data);

2.2.TCP server端

 1 #include <QtNetwork>
 2 QTcpServer *server;
 3 QTcpSocket *clientConnection;
 4 server = new QTcpServer();
 5 server->listen(QHostAddress::Any, 6665);
 6 connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
 7 void acceptConnection()
 8 {
 9 clientConnection = server->nextPendingConnection();
10 connect(clientConnection, SIGNAL(readyRead()), this, SLOT(readClient()));
11 }
12 void readClient()
13 {
14 QString str = clientConnection->readAll();
15 //或者
16 char buf[1024];
17 clientConnection->read(buf,1024);
18 }
时间: 2024-10-09 23:37:40

简单Qt网络通信的相关文章

简单QT应用到通过手写布局实现QT应用

 新建QT项目 项目结构: 2.打开QT图形编辑界面,通过拖动组件的方式生成如下界面: 3.为确定按钮添加事件.选中按钮à转到槽,截图如下: 点击clicked按钮,添加事件代码如下: 4下面是手动编写一个QT案例: 5.新建QT项目 项目结构: 编写widget.h头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton>  //按钮对应的头文件 #include <QV

socket通信流程和一个简单的网络通信程序

""" server.py 模拟网络通信服务器端代码"""import socket #导入socket包 sk=socket.socket() #建立socket对象 print(sk) address=('127.0.0.1',8888) #生成地址信息元组 sk.bind(address) #绑定该地址信息 sk.listen(3) #设置最大连接数 ''' 服务器端不关闭,客户端输入exit后关闭,服务器接收下一个连接的内容,进行对话 '

简单QT界面信号图形化输入输出

右键->转到槽,选择信号 就可以输入代码 右键->转到槽,选择信号 就可以输入代码 2个文本框接受输入数字,第3个文本框输出相加结果 1 void Dialog::on_pushButton_2_clicked() 2 { 3 QString str1=ui->lineEdit->text();//文本框获取文本 4 QString str2=ui->lineEdit_2->text(); 5 6 int db1=str1.toInt();//字符串转换int 7 in

Linux最简单的网络通信

服务器端 /* socket server * 2014-12-15 CopyRight (c) arbboter */ #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include

简单Socket网络通信

问题:编写一个网络应用程序,有客户端和服务端,客户端向服务端发送一个字符串(如"Hello Socket"),服务器收到该 字符串后将其打印到命令行上,然后向客户端返回该字符串的长度,最后,客户端输出服务器端返回的该字符串的长度, 分别用TCP和UDP两种方式去实现. Socket通信流程: 实现代码如下: TCP: package scoket; import java.io.IOException; import java.io.InputStream; import java.i

Qt之网络编程

简述 Qt Network模块提供的类允许编写 TCP/IP clients 和 servers. 其中包含一些低级别的类,例如:QTcpSocket.QTcpServer 和 QUdpSocket,表示低级的网络概念:一些高级别的类,例如:QNetworkRequest.QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作:它还提供其他的类,例如:QNetworkConfiguration.QNetworkConfigurationManage

Qt中截图功能的实现

提要 需求:加载一张图片并显示,可以放大缩小,可以截取图片的某个矩形并保存. 原以为蛮简单的一个功能,其实还是有点小复杂. 最简单Qt图片浏览器可以参考Qt自带的Demo:Image Viewer Example 看一下最终的实现效果: 图片的加载显示 这里需要实现一个QImageViewer的类,继承自QWidget. 图片用QPixmap来加载和显示,还有三个成员分别是图片的缩放因子,图片是否已经加载,viewer是否已经初始化,是否处于裁剪状态. private: QPixmap m_pi

QT 全屏显示子窗口

QT 中全屏显示子窗口的方法 QT 中窗口部件 QWidget 成员函数 showFullScreen();是用于将窗口部件全屏显示 但是他只对窗口模式的部件有用.子窗口的特征是 Qt::SubWindow不是独立的窗 口.因此对其调用 showFullScreen无效.通过对子窗口调用setWindowFlags Qt: :Dialog或 setWindowFlagsQt::Window将其设为窗口模式后即可 调用 showFullScreen();进行全屏显示了. 相对于子窗口的全屏显示方法

Qt工具知多少(一目了然)

一级题目: Qt Designer — 所见即所得的界面设计工具, 可以用拖拽的方式将控件排布在界面上,支持layout, 支持signal/slot编辑. 生成的文件保存为ui格式, ui是xml格式的普通文本文件, 默认编码为utf8, 所以界面上还可以直接写中文(但是不推荐这么做哦,还是应该用标准的Qt国际化的方法来翻译界面.). Qt Assistant — 类似MSDN的文档查看工具, 支持html的子集(图片.超链.文本着色), 支持目录结构.关键字索引和全文搜索, 可以很方便的查找