您的位置:首页 > 理论基础 > 计算机网络

QT TCP客服端-服务端模式(一)

2014-03-12 22:23 176 查看
首先我们实现一个客服端和一个服务端模式。。。粘贴代码如下:client.h****************************#ifndefCLIENT_H
#defineCLIENT_H
#include<QWidget>
#include<QtGui>
#include<QtNetwork>
#include"enum.h"
classClient:publicQWidget
{
Q_OBJECT
public:
explicitClient(QWidget*parent=0);
private:
QTextEdit*textEdit;
QLineEdit*lineEdit;
QPushButton*sendBtn;
QPushButton*connectBtn;
QTcpSocket*m_tcpsocket;
QStringuserStr;
privateslots:
voidconnectTcpServer();
voidconnectedServer();
voidreadMessage();
voidsendMessage();
};
#endif//CLIENT_H
client.cpp
*******************************************
#include"client.h"
Client::Client(QWidget*parent):
QWidget(parent)
{
userStr=QString(tr("刘红"));
textEdit=newQTextEdit;
textEdit->setReadOnly(true);
lineEdit=newQLineEdit;
connectBtn=newQPushButton("connect");
connect(connectBtn,SIGNAL(clicked()),this,SLOT(connectTcpServer()));
sendBtn=newQPushButton("send");
connect(sendBtn,SIGNAL(clicked()),this,SLOT(sendMessage()));
QHBoxLayout*bottomlayout=newQHBoxLayout;
bottomlayout->addWidget(connectBtn);
bottomlayout->addWidget(sendBtn);
QVBoxLayout*mainlayout=newQVBoxLayout;
mainlayout->addWidget(textEdit);
mainlayout->addWidget(lineEdit);
mainlayout->addLayout(bottomlayout);
setLayout(mainlayout);
}
voidClient::connectTcpServer()
{
m_tcpsocket=newQTcpSocket(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);
}
voidClient::connectedServer()
{
textEdit->append(tr("连接服务器成功!")+'\n');
}
voidClient::readMessage()
{
QStringstring;
QByteArrayblock=m_tcpsocket->readAll();
QDataStreamin(block);
in.setVersion(QDataStream::Qt_4_7);
in>>string;
textEdit->append(tr("用户有消息到来\n消息是:")+string+'\n');
}
voidClient::sendMessage()
{
inttype;
type=1;
QStringstring=lineEdit->text();
QByteArrayblock;
QDataStreamout(&block,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out<<userStr;
out<<type;
out<<string;
m_tcpsocket->write(block);
lineEdit->clear();
}
server.h
**************************************
#ifndefSERVER_H
#defineSERVER_H
#include<QWidget>
#include<QtGui>
#include<QtNetwork>
classServer:publicQWidget
{
Q_OBJECT
public:
explicitServer(QWidget*parent=0);
private:
QTextEdit*textEdit;
QLineEdit*lineEdit;
QPushButton*sendBtn;
QPushButton*startBtn;
QTcpSocket*m_tcpsocket;
QTcpServer*m_tcpserver;
privateslots:
voidstartTcpServer();
voidsendMessage();
voidnewConnect();
voidreadMessage();
};
#endif//SERVER_H
server.cpp
****************************************
#include"server.h"
Server::Server(QWidget*parent):
QWidget(parent)
{
textEdit=newQTextEdit;
textEdit->setReadOnly(true);
lineEdit=newQLineEdit;
startBtn=newQPushButton("start");
connect(startBtn,SIGNAL(clicked()),this,SLOT(startTcpServer()));
sendBtn=newQPushButton("send");
connect(sendBtn,SIGNAL(clicked()),this,SLOT(sendMessage()));
QHBoxLayout*bottomlayout=newQHBoxLayout;
bottomlayout->addWidget(startBtn);
bottomlayout->addWidget(sendBtn);
QVBoxLayout*mainlayout=newQVBoxLayout;
mainlayout->addWidget(textEdit);
mainlayout->addWidget(lineEdit);
mainlayout->addLayout(bottomlayout);
setLayout(mainlayout);
}
voidServer::startTcpServer()
{
startBtn->setEnabled(false);
m_tcpserver=newQTcpServer;
m_tcpserver->listen(QHostAddress::Any,16666);
connect(m_tcpserver,SIGNAL(newConnection()),this,SLOT(newConnect()));
}
voidServer::newConnect()
{
textEdit->append(tr("有用户链接...")+'\n');
m_tcpsocket=m_tcpserver->nextPendingConnection();
connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
}
voidServer::readMessage()
{
QStringuserstr;
inttype;
QStringstring;
QByteArrayblock=m_tcpsocket->readAll();
QDataStreamin(block);
in.setVersion(QDataStream::Qt_4_7);
in>>userstr;
in>>type;
in>>string;
textEdit->append(userstr+tr("用户有消息到来\n消息是:")+string+'\n');
}
voidServer::sendMessage()
{
QStringstring=lineEdit->text();
QByteArrayblock;
QDataStreamout(&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"
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
Servers;
s.show();
Clientc1;
c1.show();
returnapp.exec();
}
http://blog.sina.com.cn/s/blog_8254427901010cxd.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: