QT TCP客服端-服务端模式(一)
来源:互联网 发布:批处理测试端口 编辑:程序博客网 时间:2024/06/06 00:04
首先我们实现一个客服端和一个服务端模式。。。
粘贴代码如下:
client.h
****************************
#ifndef CLIENT_H
#define CLIENT_H
#include <QWidget>
#include <QtGui>
#include <QtNetwork>
#include "enum.h"
class Client : public QWidget
{
Q_OBJECT
public:
explicit Client(QWidget *parent = 0);
private:
QTextEdit *textEdit;
QLineEdit *lineEdit;
QPushButton *sendBtn;
QPushButton *connectBtn;
QTcpSocket *m_tcpsocket;
QString userStr;
private slots:
void connectTcpServer();
void connectedServer();
void readMessage();
void sendMessage();
};
#endif // CLIENT_H
client.cpp
*******************************************
#include "client.h"
Client::Client(QWidget *parent) :
QWidget(parent)
{
userStr = QString(tr("刘红"));
textEdit = new QTextEdit;
textEdit->setReadOnly(true);
lineEdit = new QLineEdit;
connectBtn = new QPushButton("connect");
connect(connectBtn,SIGNAL(clicked()),this,SLOT(connectTcpServer()));
sendBtn = new QPushButton("send");
connect(sendBtn,SIGNAL(clicked()),this,SLOT(sendMessage()));
QHBoxLayout *bottomlayout = new QHBoxLayout;
bottomlayout->addWidget(connectBtn);
bottomlayout->addWidget(sendBtn);
QVBoxLayout *mainlayout = new QVBoxLayout;
mainlayout->addWidget(textEdit);
mainlayout->addWidget(lineEdit);
mainlayout->addLayout(bottomlayout);
setLayout(mainlayout);
}
void Client::connectTcpServer()
{
m_tcpsocket = new QTcpSocket(this);
m_tcpsocket->abort();
m_tcpsocket->connectToHost(QHostAddress::LocalHost,16666);
connect(m_tcpsocket,SIGNAL(connected()),this,SLOT(connectedServer()));
connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
textEdit->append(tr("连接服务器......")+'\n');
connectBtn->setEnabled(false);
}
void Client::connectedServer()
{
textEdit->append(tr("连接服务器成功!")+'\n');
}
void Client::readMessage()
{
QString string;
QByteArray block = m_tcpsocket->readAll();
QDataStream in(block);
in.setVersion(QDataStream::Qt_4_7);
in>>string;
textEdit->append(tr("用户有消息到来\n消息是:")+string+'\n');
}
void Client::sendMessage()
{
int type;
type = 1;
QString string = lineEdit->text();
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out<<userStr;
out<<type;
out<<string;
m_tcpsocket->write(block);
lineEdit->clear();
}
server.h
**************************************
#ifndef SERVER_H
#define SERVER_H
#include <QWidget>
#include <QtGui>
#include <QtNetwork>
class Server : public QWidget
{
Q_OBJECT
public:
explicit Server(QWidget *parent = 0);
private:
QTextEdit *textEdit;
QLineEdit *lineEdit;
QPushButton *sendBtn;
QPushButton *startBtn;
QTcpSocket *m_tcpsocket;
QTcpServer *m_tcpserver;
private slots:
void startTcpServer();
void sendMessage();
void newConnect();
void readMessage();
};
#endif // SERVER_H
server.cpp
****************************************
#include "server.h"
Server::Server(QWidget *parent) :
QWidget(parent)
{
textEdit = new QTextEdit;
textEdit->setReadOnly(true);
lineEdit = new QLineEdit;
startBtn = new QPushButton("start");
connect(startBtn,SIGNAL(clicked()),this,SLOT(startTcpServer()));
sendBtn = new QPushButton("send");
connect(sendBtn,SIGNAL(clicked()),this,SLOT(sendMessage()));
QHBoxLayout *bottomlayout = new QHBoxLayout;
bottomlayout->addWidget(startBtn);
bottomlayout->addWidget(sendBtn);
QVBoxLayout *mainlayout = new QVBoxLayout;
mainlayout->addWidget(textEdit);
mainlayout->addWidget(lineEdit);
mainlayout->addLayout(bottomlayout);
setLayout(mainlayout);
}
void Server::startTcpServer()
{
startBtn->setEnabled(false);
m_tcpserver = new QTcpServer;
m_tcpserver->listen(QHostAddress::Any,16666);
connect(m_tcpserver,SIGNAL(newConnection()),this,SLOT(newConnect()));
}
void Server::newConnect()
{
textEdit->append(tr("有用户链接...")+'\n');
m_tcpsocket = m_tcpserver->nextPendingConnection();
connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
}
void Server::readMessage()
{
QString userstr;
int type;
QString string;
QByteArray block = m_tcpsocket->readAll();
QDataStream in(block);
in.setVersion(QDataStream::Qt_4_7);
in>>userstr;
in>>type;
in>>string;
textEdit->append(userstr+tr("用户有消息到来\n消息是:")+string+'\n');
}
void Server::sendMessage()
{
QString string = lineEdit->text();
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out<<string;
m_tcpsocket->write(block);
}
main.cpp
*********************************
#include <QApplication>
#include <QDebug>
#include "server.h"
#include "client.h"
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
Server s;
s.show();
Client c1;
c1.show();
return app.exec();
}
http://blog.sina.com.cn/s/blog_8254427901010cxd.html
0 0
- QT TCP客服端-服务端模式(一)
- QT TCP客服端-服务端模式(一)
- TCP/IP网络编程 学习笔记_5 --基于TCP的服务端/客服端
- TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端
- TCP为什么三次握手以及服务端如何知道客服端异常断开
- tcp客服端服务器模型
- 安装配置VPN服务端和客服端
- yate sip 服务端和客服端 搭建
- java学习之服务端和客服端
- socket 服务端 建立和 客服端 连接
- vs2008+QT+asio tcp服务端测试程序
- Tcp客服端并发访问服务器
- TCP协议的客服端 服务器
- SVN服务端和客服端(如何清除SVN密码)
- oc客服端向服务端传输数据的加密
- TCP(一)客户端和服务端通信
- qt之tcp(一)
- 服务端和android客服端回滚
- Linux学习笔记二十八Network_hw
- 回调函数例子
- 验证码创建,以及验证码输入判断;
- zendsafeguard 加密php
- 制作Andriod程序的数字签名需要使用JDK
- QT TCP客服端-服务端模式(一)
- c#中char.IsDigit和char.IsNumeric的区别
- 数据库动态数据的处理+Repeater前台动态列的绑定
- 短信拦截器
- Java 单例模式详解
- 每天学习算法系列—内部排序之归并排序和快速排序
- RTP信息包标头域
- Hdu 2838 step5.3.7 (树状数组)
- 全面剖析Linux库文件路径的添加(转)