Qt中Tcp:Server、Client
来源:互联网 发布:网上考试源码 编辑:程序博客网 时间:2024/05/01 15:22
//============server==============#include "TcpServer.h"#include <QHBoxLayout>#include <QNetworkInterface>#include <QMessageBox>#include "ChooseInterface.h"TcpServer::TcpServer(QWidget *parent) : QWidget(parent){ // 创建服务器并监听 _server = new QTcpServer; _server->listen(QHostAddress::Any, 9988); //当有客户端来连接时,调用slotNetConnection方法 connect(_server, SIGNAL(newConnection()), this, SLOT(slotNetConnection())); _show = new QTextBrowser; QHBoxLayout* lay = new QHBoxLayout(this); lay->addWidget(_show);}void TcpServer::slotNetConnection(){ // 判断是否有未处理的连接,相当于C语言中的accept() while(_server->hasPendingConnections()) { // 调用nextPeddingConnection去获得连接的socket _socket = _server->nextPendingConnection(); _show->append("New connection ...."); // 为新的socket提供槽函数,来接收数据 connect(_socket, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); }}void TcpServer::slotReadyRead(){ // 接收数据,判断是否有数据,如果有,通过readAll函数获取所有数据 while(_socket->bytesAvailable() > 0) { _show->append("Data arrived ..... "); QByteArray buf = _socket->readAll(); _show->append(buf); }}
//==============client==============#include "TcpClient.h"#include <QHBoxLayout>#include <QPushButton>TcpClient::TcpClient(QWidget *parent) : QWidget(parent){ _socket = new QTcpSocket(this); _socket->connectToHost("127.0.0.1", 9988); _lineEdit = new QLineEdit; QHBoxLayout* lay = new QHBoxLayout(this); lay->addWidget(_lineEdit); QPushButton* button = new QPushButton("Send"); lay->addWidget(button); connect(button, SIGNAL(clicked()), this, SLOT(slotButtonClick())); connect(_lineEdit, SIGNAL(returnPressed()), this, SLOT(slotButtonClick()));}void TcpClient::slotButtonClick(){ QString strText = _lineEdit->text(); if(strText.isEmpty()) return; _socket->write(strText.toUtf8()); _lineEdit->clear();}
//client-example#include "widget.h"#include <QHBoxLayout>#include <QVBoxLayout>#include <QMessageBox>#include <QHostAddress>Widget::Widget(QWidget *parent) : QWidget(parent){ tcpsocket=new QTcpSocket(this); btn1=new QPushButton(tr("连接")); btn2=new QPushButton(tr("发送")); connect(btn1,SIGNAL(clicked()),this,SLOT(btn1_click())); connect(btn2,SIGNAL(clicked()),this,SLOT(btn2_click())); edit1=new QLineEdit(); edit2=new QLineEdit(); edit3=new QLineEdit(); label1=new QLabel(tr("IP地址:")); label2=new QLabel(tr("端口号:")); label3=new QLabel(tr("消息内容:")); textb=new QTextBrowser(); QHBoxLayout *lay1=new QHBoxLayout(); lay1->addWidget(label1); lay1->addWidget(edit1); lay1->addWidget(label2); lay1->addWidget(edit2); lay1->addWidget(btn1); QHBoxLayout *lay2=new QHBoxLayout(); lay2->addWidget(label3); lay2->addWidget(edit3); lay2->addWidget(btn2); QHBoxLayout *lay4=new QHBoxLayout(); lay4->addWidget(textb); QVBoxLayout * lay3=new QVBoxLayout(this); lay3->addLayout(lay1); lay3->addLayout(lay2); lay3->addLayout(lay4); /*接收数据*/ connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(myrecvdata()));}bool stat = true;//连接void Widget::btn1_click(){ if(stat == true) { /*禁用按钮,值是false*/ //btn1->setEnabled(false); //获取IP地址 QString ipaddr=edit1->text(); edit1->setEnabled(false); //获取端口号 QString port=edit2->text(); edit2->setEnabled(false); serverip=new QHostAddress(); serverip->setAddress(ipaddr); tcpsocket->connectToHost(*serverip,port.toInt()); connect(tcpsocket, &QTcpSocket::connected, [&](){ QMessageBox::information(this,"Tips","conn success."); }); btn1->setText(tr("断开")); stat = false; } else { //释放socket连接 delete serverip; serverip = NULL; edit1->setEnabled(true); edit2->setEnabled(true); stat = true; btn1->setText(tr("连接")); }}//发送void Widget::btn2_click(){ QString strtext=edit3->text(); if(!strtext.isEmpty()) tcpsocket->write(strtext.toStdString().data()); /*清空输入框*/ edit3->clear(); /*设置输入框重新获得焦点*/ edit3->setFocus();}//接收消息void Widget::myrecvdata(){ char buf[1024]={0}; /*bytesAvailable()表示有效数据*/ while(tcpsocket->bytesAvailable()>0) { memset(buf,0,sizeof(buf)); tcpsocket->read(buf,sizeof(buf)); textb->append(buf); //QMessageBox::information(this,"消息",buf); }}//关闭void Widget::closeEvent(QCloseEvent *event){ if(QMessageBox::question(this,"提示","你确定要退出程序吗?",QMessageBox::Yes|QMessageBox::No,QMessageBox::No)==QMessageBox::Yes) { event->accept(); }else { event->ignore(); }}Widget::~Widget(){}
0 0
- Qt中Tcp:Server、Client
- Qt下Client与Server之间的双向TCP通信。
- Qt下Client与Server之间的双向TCP通信。
- Qt TCP之Server/Client/Socket信号、槽等总结
- Qt tcp client程序
- Qt tcp client程序
- java Tcp Client server
- linux tcp server client
- TCP:Server-Client程序
- ECHO TCP Server Client
- gevent tcp server&client
- TCP Server/Client, Select
- TCP Socket Server Client
- tcp client and server
- golang tcp server client
- Linux局域网中 TCP 多线程 Server + Client 聊天室程序源码
- UNP: Chatper5-TCP Server Client
- 简单 TCP UDP server client
- 网络连接评分机制之NetworkFactory
- Android简单的蓝牙配对与连接
- Java 获取本机IP及本机名称
- 个推你应该这样用的
- 学习使用安卓系统的相机和相册
- Qt中Tcp:Server、Client
- redis-结合Sentinel实现主从配置
- Ajax技术1——XMLHttpRequest对象
- 选票统计
- 计算一天的毫秒与微秒相除
- leetcode/algorithm 3. Longest Substring Without Repeating Characters
- R语言主成分分析
- jQuery获取当前时间
- iOS中的Copy