Linux与网络通信:基于TCP的网络聊天室

本文介绍如何利用Qt库中的QTcpServer和QTcpSocket组件,构建一个可靠的TCP网络聊天室。聊天室由服务器端和客户端组成,客户端可以通过输入用户名、服务器地址和端口号参与聊天,所有用户能查看聊天记录。主要涉及TCP协议的特性及其在HTTP、FTP等高层协议中的应用。
摘要由CSDN通过智能技术生成

网络聊天室的功能,现在我通过Qt提供的QTcpServer和QTcpSocket实现。

TCP是一种可靠的,面向连接,面向数据流的传输协议,适用于高层协议,其中高层协议包括HTTP,FTP,而TCP协议非常适合数据的连续传输。

聊天室分为服务器端和客户端,服务器程序可以创建一个聊天室,而客户端程序可以输入登入的用户名,服务器地址以及所使用的端口号码,然后进入聊天室,在聊天室中的每个用户都可以看到聊天记录。

接下来实现的是客户端的实现:

客户端:

main.cpp

#include<QApplication>
#include"tcpclient.h"
int main(int argc,char *argv[])
{
	QApplication app(argc,argv);
	QTranslator translator(0);
	translator.load("tcpclient_wxj");
	app.installTranslator(&translator);
	TcpClient *tcpclient = new TcpClient();
	tcpclient->show();
	return app.exec();
}

tcpclient.h

#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include<QtGui>
#include<QtNetwork>
class TcpClient:public QDialog
{
	Q_OBJECT
public:
	TcpClient(QWidget *parent=0,Qt::WindowFlags f=0);
	~TcpClient();
public:
	QListWidget *ListWidgetContent;
	QLineEdit *LineEditSend;
	QPushButton *PushButtonSend;
	QLabel *LabelUser;
	QLineEdit *LineEditUser;
	QLabel *LabelServerIP;
	QLineEdit *LineEditServerIP;
	QLabel *LabelPort;
	QLineEdit *LineEditPort;
	QPushButton *PushButtonEnter;

	QString userName;
	int port;
	QHostAddress *serverIP;
	QTcpSocket *tcpSocket;
	bool status;
public slots:
	void slotEnter();
	void slotConnected();
	void slotDisconnected();
	void slotSend();
	void dataReceived();
};
#endif

tcpclient.cpp

#include"tcpclient.h"
TcpClient::TcpClient(QWidget *parent,Qt::WindowFlags f):QDialog(parent,f)
{
	QFont font("ZYSong18030",12);
	setFont(font);
	setWindowTitle(tr("TCP CLient"));
	QVBoxLayout *vbMain = new QVBoxLayout(this); //这行开始是客户端的显示与控制
	
	ListWidgetContent = new QListWidget(this);
	vbMain->addWidget(ListWidgetContent);
	QHBoxLayout *hb1 = new QHBoxLayout();
	LineEditSend = new QLineEdit(this);
	hb1->addWidget(LineEditSend);
	PushButtonSend = new QPushButton(this);
	PushButtonSend->setText(tr("Send"));
	hb1->addWidget(PushButtonSend);
	vbMain->addLayout(hb1);
	
	QHBoxLayout *hb2 = new QHBoxLayout();
	LabelUser = new QLabel(this);
	LabelUser->setText(tr("User name:"));
	hb2->addWidget(La
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值