23TCP通信

匿名 (未验证) 提交于 2019-12-03 00:32:02

.pro 文件中加入:QT+=network

在Qt中实现TCP/IP服务器端通信的流程:

1.创建监听套接字,QTcpServer

2.将监听套接字设置为监听模式, listen

4.接收或者向客户端发送数据

5.接收数据:使用read()或者readAll()函数

6.发送数据:使用write()函数

监听套接字和通信套接字的区别:

在服务端包含两种套接字QTcpServer,QTcpSocket. QTcpServer用于listen()监听模式,监听哪个IP,从哪个端口接入。QTcpSocket用于两者之间的真正通信,当两者完成连接后,各个都拥有一个QTcpSocket,如:sock1,sock1,那么这两个通信套接字等同于各自的手机号码,用于通信使用。

客户端通信流程:

1.创建套接字

2.连接服务器,可以使用QTcpSocket类的connectToHost()函数来连接服务器。

3.向服务器发送或者接受数据

如图:

解析:当服务端处于监听模式时(listen),客户端通过connectToHost请求连接,此时服务端就是触发信号newConnection(系统给出,非自拟),调用对应的槽函数(可自拟,或直接使用Lambda表达式)。服务端连通后,客户端就会立即触发信号connected.说明两者之间已完成连接,彼此可以利用write发出信息,利用read,readAll接受信息。

服务器

TcpSever.h

#ifndef TCPSEVER_H

#define TCPSEVER_H

#include <QWidget>

#include <QTcpServer>

#include <QTcpSocket>

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

public:

private slots:

private:

};

#endif // TCPSEVER_H

TcpSever.cpp

#include "TcpSever.h"

#include "ui_widget.h"

#include <QTime>

#include <QDebug>

Widget::Widget(QWidget *parent) :

{

}

Widget::~Widget()

{

}

void Widget::on_pushButton_clicked()

{

}

void Widget::on_pushButton_2_clicked()

{

}

同一程序添加两个窗口,且有设计器。新建一个文件,但不是C++类文件,而是QT且带有界面类的,最后在main中使用show()直接显示。如下图:

客户端

tcpclient.h

#ifndef TCPCLIENT_H

#define TCPCLIENT_H

#include <QWidget>

#include <QTcpSocket>

#include <QHostAddress>

namespace Ui {

class TcpClient;

}

class TcpClient : public QWidget

{

public:

private slots:

private:

};

#endif // TCPCLIENT_H

tcpclient.cpp

#include "tcpclient.h"

#include "ui_tcpclient.h"

#include <QDebug>

#include <QTime>

TcpClient::TcpClient(QWidget *parent) :

{

}

TcpClient::~TcpClient()

{

}

void TcpClient::on_connect_clicked()

{

}

void TcpClient::on_send_clicked()

{

}

void TcpClient::on_close_clicked()

{

}

main.cpp

#include "TcpSever.h"

#include <QApplication>

#include "tcpclient.h"

int main(int argc, char *argv[])

{

}

程序结果图:

原文:https://www.cnblogs.com/gd-luojialin/p/9215782.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!