博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt的Socket数据通讯的一个例子。
阅读量:5955 次
发布时间:2019-06-19

本文共 3093 字,大约阅读时间需要 10 分钟。

hot3.png

QTcpServer类 用来侦听端口 ,获取QTcpSocket.

QTcpSocket有  connected的信号(已经连接),还有readyread()信号,表示已经有数据发过来了,准备读取。

  若要关闭 当前连接只需要 调用 qtcpsocket::close();就关闭了当前连接

下面有两个例子

   服务器端

用的是控制台程序(QT) 当用户 发送数据过来 就cout显示,然后就write一个 I Love You的字符串 返回到客户端。然后close断开连接

客户端

  用的书图形界面,一个输入框 输入数据 然后发送,最后 QMessagebox显示服务器返回消息

=======================

服务器端(三个文件)

#ifndef MYSERVER_H#define MYSERVER_H#include
#include
#include
#include
class myserver : public QTcpServer{    Q_OBJECTpublic:    QTcpSocket * socket;    QTcpServer *server;    myserver();private slots:    void getData();    void newconnectslot();};#endif // MYSERVER_H#include "myserver.h"#include
#include
#include
myserver::myserver(){    this->socket=new QTcpSocket;    this->server=new QTcpServer;    if(this->server->listen(QHostAddress::Any,520))    {        std::cout<<"bind port 520 successful."<
server,SIGNAL(newConnection()),this,SLOT(newconnectslot()));}void myserver::newconnectslot(){    this->socket=this->server->nextPendingConnection();    connect(this->socket,SIGNAL(readyRead()),this,SLOT(getData()));}void myserver::getData(){    QByteArray by=this->socket->readAll();    QDataStream ds(by);    QString x;    ds>>x;    QByteArray ba = x.toLatin1();    char * p=ba.data();    std::cout<

<

write("I love you");//返回给客户端    this->socket->close();//断开连接}#include
#include
#include"myserver.h"#include
int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    std::cout<<"--Server initialized By HanHan--"<

客户端(三个文件)
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include 
#include
#include
#include
#include
namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    QTcpSocket * socket;    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private slots:    void connnectslot();    void on_btn_send_clicked();    void readyslot();private:    Ui::MainWindow *ui;};#endif // MAINWINDOW_H
 
#include "mainwindow.h"#include "ui_mainwindow.h"#include
#include
MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    this->socket=new QTcpSocket;}MainWindow::~MainWindow(){    delete ui;}void MainWindow::on_btn_send_clicked(){    QHostAddress address("127.0.0.1");    this->socket->connectToHost(address,520);    connect(this->socket,SIGNAL(connected()),this,SLOT(connnectslot()));    connect(this->socket,SIGNAL(readyRead()),this,SLOT(readyslot()));//接收发来的数据}void MainWindow::connnectslot(){     QString data=this->ui->data_edit->toPlainText();     QByteArray array;     QDataStream ds(&array,QIODevice::WriteOnly);     ds<
socket->write(array);}
 
void MainWindow::readyslot(){    QString x=this->socket->readAll();    QMessageBox::about(this,"x",x);}#include "mainwindow.h"#include 
int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}

运行截图:

n
 
 

转载于:https://my.oschina.net/u/1863614/blog/689555

你可能感兴趣的文章
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
<气场>读书笔记
查看>>
web安全问题分析与防御总结
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>