基于TCP的网络聊天程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于TCP 的网络聊天程序
问题概述:问题概述:
网络聊天是网络应用中的一种常见的功能。TCP 是一种可靠的、面向连接、面向数据流的传输协议,多数网络协议都使用TCP 协议,包括HTTP 和FTP ,TCP 协议非常适合数据的连续传输。协议非常适合数据的连续传输。
技术难点:技术难点: TCP 通信协议;QTcpsocket 的使用。的使用。
实践方案:实践方案:
在linux_ubuntu 下使用qt_eclipse 编写c++程序。程序。
由面向对象的思想,为了实现程序,在server 终端部分有3个类:个类: 1. serve
2. tcpclient
3. tcpserve
Serve 类是继承自QTcpServer,实现TCP 协议的服务器;协议的服务器;
Tcpclient 继承自QTcpSocket ,实现一个TCP 套接字;套接字; Tcpserve 是一个QDialog,负责服务器终端的对话框显示与控制。负责服务器终端的对话框显示与控制。 如下是对serve 的实现代码:的实现代码:
Server .h
#include <QtNetwork>
#include "tcpclientsocket.h"
class Server : public QTcpServer
{Q_OBJECT
public: Server(QObject *parent = 0,int port=0);
QList<TcpClientSocket*>tcpClientSocketList;
signals:
voidupdateServer(QString,int); public slots:
voidupdateClients(QString,int);
voidslotDisconnected(int);
protected:
voidincomingConnec on(intsocketDescriptor);}; ____________________________________________________________________ Tcpclient.h
#include <QtGui>
#include <QtNetwork> classTcpClientSocket : public QTcpSocket
{Q_OBJECT
public:
TcpClientSocket(QObject *parent=0);
~TcpClientSocket();
signals:
voidupdateClients(QString,int);
void disconnected(int);
protected slots:
voiddataReceived();
voidslotDisconnected();};
__________________________________________________________________ Tcpserver.h .h
Tcpserver
#include <QtGui>
#include <QtNetwork>
#include "server.h"
classTcpServer : public QWidget
{Q_OBJECT
public:
TcpServer(QWidget *parent=0, Qt::WindowFlags f=0 );
~TcpServer();
public:
QListWidget *ListWidgetContent;
QLabel* LabelPort;
QLineEdit* LineEditPort;
QPushBu on* PushBu onCreate;
int port;
Server *server;
public :
voidslotCreateServer();
voidupdateServer(QString,int);};
________________________________________________________________
Server.cpp
#include <QtNetwork>
#include "server.h"
Server::Server(QObject *parent,int port): QTcpServer(parent){
listen(QHostAddress::Any,port);}
void Server::incomingConnec on(intsocketDescriptor)
{TcpClientSocket *tcpClientSocket = new TcpClientSocket(this);
connect(tcpClientSocket,SIGNAL(updateClients(QString,int)),this,SLOT(updateClients( QString,int)));
connect(tcpClientSocket,SIGNAL(disconnected(int)),this,SLOT(slotDisconnected(int))); tcpClientSocket->setSocketDescriptor(socketDescriptor); tcpClientSocketList.append(tcpClientSocket);}
void Server::updateClients(QStringmsg,int length)
{emitupdateServer(msg,length);