首页 > 代码库 > Qt的Socket数据通讯的一个样例。
Qt的Socket数据通讯的一个样例。
QTcpServer类 用来侦听port ,获取QTcpSocket.
QTcpSocket有 connected的信号(已经连接),还有readyread()信号,表示已经有数据发过来了。准备读取。
若要关闭 当前连接仅仅须要 调用 qtcpsocket::close();就关闭了当前连接
以下有两个样例
server端
用的是控制台程序(QT) 当用户 发送数据过来 就cout显示。然后就write一个 I Love You的字符串 返回到client。然后close断开连接
client
用的书图形界面。一个输入框 输入数据 然后发送,最后 QMessagebox显示server返回消息
=======================
server端(三个文件)
#ifndef MYSERVER_H#define MYSERVER_H#include<QTcpSocket>#include<iostream>#include <QObject>#include<QTcpServer>class myserver : public QTcpServer{ Q_OBJECTpublic: QTcpSocket * socket; QTcpServer *server; myserver();private slots: void getData(); void newconnectslot();};#endif // MYSERVER_H#include "myserver.h"#include<QByteArray>#include<QString>#include<QDataStream>myserver::myserver(){ this->socket=new QTcpSocket; this->server=new QTcpServer; if(this->server->listen(QHostAddress::Any,520)) { std::cout<<"bind port 520 successful."<<std::endl; }else { std::cout<<"bind port 520 failed."<<std::endl; } QObject::connect(this->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<<p<<std::endl; socket->write("I love you");//返回给client this->socket->close();//断开连接}#include <QCoreApplication>#include<iostream>#include"myserver.h"#include<QHostAddress>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); std::cout<<"--Server initialized By HanHan--"<<std::endl; myserver *server=new myserver; return a.exec();}
client(三个文件)
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include<QString>#include<QByteArray>#include<QDataStream>#include<QTcpSocket>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<QHostAddress>#include<QMessageBox>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=http://www.mamicode.com/this->ui->data_edit->toPlainText();>
void MainWindow::readyslot(){ QString x=this->socket->readAll(); QMessageBox::about(this,"x",x);}#include "mainwindow.h"#include <QApplicatio>int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
执行截图:
n
Qt的Socket数据通讯的一个样例。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。