博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP_QT
阅读量:3903 次
发布时间:2019-05-23

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

socket

在这里插入图片描述

在这里插入图片描述

服务器代码

------------h-------#ifndef SERVERWIDGET_H#define SERVERWIDGET_H#include 
#include
//监听套接字#include
//通信套接字QT_BEGIN_NAMESPACEnamespace Ui { class ServerWidget; }QT_END_NAMESPACEclass ServerWidget : public QWidget{ Q_OBJECTpublic: ServerWidget(QWidget *parent = nullptr); ~ServerWidget();private slots: void on_buttonSend_clicked(); void on_buttonClose_clicked();private: Ui::ServerWidget *ui; QTcpServer *tcpServer; QTcpSocket *tcpSocket;};#endif // SERVERWIDGET_H------------cpp-----#include "serverwidget.h"#include "ui_serverwidget.h"ServerWidget::ServerWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::ServerWidget){ ui->setupUi(this); //初始化 tcpServer = NULL; tcpSocket = NULL; //监听套接字 ,指定父对象,自动回收空间 tcpServer = new QTcpServer(this); //bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0); tcpServer->listen(QHostAddress::Any,8888);//bind 和 监听 合在一起了 setWindowTitle("Server"); connect(tcpServer,&QTcpServer::newConnection, [&](){ //取出通信套接字,不需要动态分配 //QTcpSocket *nextPendingConnection(); tcpSocket = tcpServer->nextPendingConnection(); //显示连接的信息在窗口上,获取对方ip和端口 QString ip = tcpSocket->peerAddress().toString(); qint16 port = tcpSocket->peerPort(); //组包 QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port); ui->textEditRead->setText(temp); //接受从客户端的消息,自动触发readyRead() connect(tcpSocket,&QTcpSocket::readyRead, [&](){ //从通信套接字中取出内容 QByteArray array = tcpSocket->readAll(); ui->textEditRead->append(array); }); });// //接受从客户端的消息,自动触发readyRead()// connect(tcpSocket,&QTcpSocket::readyRead,// [&](){// //从通信套接字中取出内容// QByteArray array = tcpSocket->readAll();//// ui->textEditRead->append(array);// });}ServerWidget::~ServerWidget(){ delete ui;}void ServerWidget::on_buttonSend_clicked(){ //获取编辑区的内容 QString str = ui->textEditWrite->toPlainText(); //给对方发送数据,使用套接字是通信套接字 if (tcpSocket != NULL) tcpSocket->write(str.toUtf8().data());}void ServerWidget::on_buttonClose_clicked(){ //主动和客户端断开连接 if (tcpSocket != NULL){ tcpSocket->disconnectFromHost(); tcpSocket->close(); }}

客户端代码

------------------------------------h#ifndef CLIENTWIDGET_H#define CLIENTWIDGET_H#include 
#include
//通信套接字//#include
namespace Ui {class ClientWidget;}class ClientWidget : public QWidget{ Q_OBJECTpublic: explicit ClientWidget(QWidget *parent = nullptr); ~ClientWidget();private slots: void on_buttonConnect_clicked(); void on_buttonSend_clicked(); void on_buttonClose_clicked();private: Ui::ClientWidget *ui; QTcpSocket *tcpsocket;};#endif // CLIENTWIDGET_H----------------------------------cpp-----------#include "clientwidget.h"#include "ui_clientwidget.h"#include
//QHostAddress(ip) 没有头文件按 会报错ClientWidget::ClientWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ClientWidget){ ui->setupUi(this); tcpsocket = NULL; tcpsocket = new QTcpSocket(this); //virtual void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite); //tcpsocket->connectToHost(,8888); connect(tcpsocket,&QTcpSocket::connected, [=](){ ui->textEditRead->setText("successs to connect server"); }); connect(tcpsocket,&QTcpSocket::readyRead, [=](){ //从通信套接字中取出内容 QByteArray array = tcpsocket->readAll(); ui->textEditRead->append(array); });}ClientWidget::~ClientWidget(){ delete ui;}void ClientWidget::on_buttonConnect_clicked(){ //获取服务器端口和IP qint16 port = ui->lineEditIP->text().toInt(); QString ip = ui->lineEditPort->text(); //主动连接服务器 tcpsocket->connectToHost(QHostAddress(ip), port);}void ClientWidget::on_buttonSend_clicked(){ //获取编辑区的内容 QString str = ui->textEditWrite->toPlainText(); //给对方发送数据,使用套接字是通信套接字 if (tcpsocket != NULL) tcpsocket->write(str.toUtf8().data());}void ClientWidget::on_buttonClose_clicked(){ //主动断开连接 if (tcpsocket != NULL){ tcpsocket->disconnectFromHost(); tcpsocket->close(); }}

主函数代码

#include "serverwidget.h"#include "clientwidget.h"#include 
int main(int argc, char *argv[]){ QApplication a(argc, argv); ServerWidget w; ClientWidget c; c.show(); w.show(); return a.exec();}

转载地址:http://ycten.baihongyu.com/

你可能感兴趣的文章
java笔记--map
查看>>
各个数据库中,查询前n条记录的方法
查看>>
数据库 SQL 查询当前时间
查看>>
idea插件--热部署Jrebel(附热部署不生效解决方案)
查看>>
element之select选择框多选框获取label值
查看>>
Js--防抖和节流学习
查看>>
java 获取年月日时分秒和当月第一天和最后一天
查看>>
html--innerHTML用法及和与innerText区别
查看>>
基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看
查看>>
基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看(二)
查看>>
局域网内,在Linux 安装MySQL,部署Java Web应用(一)
查看>>
分享一个毕业实习体会
查看>>
Java Web项目包目录结构分享
查看>>
Spring 4.0.6 + Hibernate 4.3.5.1.Final + JPA2.0 + DBCP2 集成
查看>>
SpringMVC 4 配置返回JSP,和Freemarker视图
查看>>
Java 汉字转换为中文拼音的研究一:读取.db文件
查看>>
Excel设置固定的打印表头
查看>>
Java 中文排序方式的尝试
查看>>
iText PDF实战:目录及Helloworld
查看>>
通过读取Properties文件,Java动态实例化和 调用set方法于实体
查看>>