#include "tcpclient.h"
#include <QGridLayout>
#include <QMessageBox>
#include <QTextCodec>
TcpClient::TcpClient(QWidget *parent)
: QDialog(parent)
{
QFont font("GB1302",12);
setFont(font);
setWindowTitle(tr("Tcp Client:A"));
setStyleSheet("background-color:rgb(180,180,180");
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QHBoxLayout *vbMain=new QHBoxLayout(this);
ListWidgetContent=new QListWidget(this);
vbMain->addWidget(ListWidgetContent);
QVBoxLayout *vb1=new QVBoxLayout();
QVBoxLayout *vb2=new QVBoxLayout();
QVBoxLayout *vb3=new QVBoxLayout();
QHBoxLayout *hb4=new QHBoxLayout();
QHBoxLayout *hb5=new QHBoxLayout();
QHBoxLayout *hb6=new QHBoxLayout();
LineEditSend=new QLineEdit(this);
vb3->addWidget(LineEditSend);
PushButtonSend=new QPushButton(this);
PushButtonSend->setText(tr("发送"));
vb3->addWidget(PushButtonSend);
LabelUser=new QLabel(tr("用户名:"));
vb1->addWidget(LabelUser);
LineEditUser=new QLineEdit(this);
vb1->addWidget(LineEditUser);
LineEditUser->setText(tr("Jack"));
userName=LineEditUser->text();
LabelServerIP=new QLabel(tr("服务器 IP:"));
vb2->addWidget(LabelServerIP);
LineEditServerIP=new QLineEdit(this);
vb2->addWidget(LineEditServerIP);
LineEditServerIP->setText(tr("58.154.232.97"));
LabelPort=new QLabel(tr("端口号:"));
hb4->addWidget(LabelPort);
LineEditPort=new QLineEdit(this);
port=8010;
LineEditPort->setText(QString::number(port));
hb4->addWidget(LineEditPort);
status=false;
f=false;
PushButtonEnter=new QPushButton(tr("登录"));
hb5->addWidget(PushButtonEnter);
connect(PushButtonEnter,SIGNAL(clicked()),this,SLOT(slotEnter()));
connect(PushButtonSend,SIGNAL(clicked()),this,SLOT(slotSend()));
serverIP=new QHostAddress();
PushButtonSend->setEnabled(false);
PushButtonQuit=new QPushButton(tr("退出"));
hb5->addWidget(PushButtonQuit);
connect(PushButtonQuit,SIGNAL(clicked()),this,SLOT(close()));
PushButtonClear=new QPushButton(this);
PushButtonClear->setText(tr("清除"));
vb3->addWidget(PushButtonClear);
connect(PushButtonClear,SIGNAL(clicked()),this,SLOT(slotClear()));
vb1->addLayout(hb6);
vb1->addLayout(hb4);
vb1->addLayout(vb2);
vb1->addLayout(vb3);
vb1->addLayout(hb5);
vbMain->addLayout(vb1);
tcpSocket=new QTcpSocket(this);
connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
}
TcpClient::~TcpClient()
{
}
void TcpClient::slotClear()
{
ListWidgetContent->clear();
}
void TcpClient::slotEnter()
{
if(!status)
{
QString ip=LineEditServerIP->text();
if(!serverIP->setAddress(ip))
{
QMessageBox::information(this,tr("Error"),tr("Server IP address error"));
return;
}
if(LineEditUser->text()=="")
{
QMessageBox::information(this,tr("Error"),tr("User name error"));
return;
}
connect(tcpSocket,SIGNAL(connected()),this,SLOT(slotConnected()));
connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
status=true;
f=true;
tcpSocket->connectToHost(*serverIP,port);
}
else
{
int length=0;
userName=LineEditUser->text();
QString msg=userName+tr(":Leave Chat Room");
if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length())
{
return;
}
tcpSocket->disconnectFromHost();
status=false;
PushButtonSend->setEnabled(false);
PushButtonEnter->setText(tr("登录"));
}
}
void TcpClient::displayError(QAbstractSocket::SocketError)
{
QMessageBox::information(this,NULL,tr("Error:%1").arg(tcpSocket->errorString()));
tcpSocket->disconnectFromHost();
status=false;
PushButtonSend->setEnabled(false);
}
void TcpClient::slotSend()
{
if(LineEditSend->text()=="")
{
return;
}
userName=LineEditUser->text();
QString msg=userName+":"+LineEditSend->text();
tcpSocket->write(msg.toLatin1(),msg.length());
LineEditSend->clear();
}
void TcpClient::dataReceived()
{
while(tcpSocket->bytesAvailable()>0)
{
QByteArray datagram;
datagram.resize(tcpSocket->bytesAvailable());
QHostAddress sender;
tcpSocket->read(datagram.data(),datagram.size());
QString msg=datagram.data();
ListWidgetContent->addItem(msg.left(datagram.size()));
}
}
void TcpClient::slotConnected()
{
if(f)
{
int length=0;
PushButtonSend->setEnabled(false);
PushButtonEnter->setText(tr("离开"));
userName=LineEditUser->text();
QString msg=userName+tr(":Enter Chat Room");
if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length())
{
return;
}
f=false;
}
PushButtonSend->setEnabled(true);
}
没有合适的资源?快使用搜索试试~ 我知道了~
qt基于Socket的实时网络聊天
共49个文件
o:17个
cpp:13个
h:4个
4星 · 超过85%的资源 需积分: 10 89 下载量 182 浏览量
2011-02-26
18:36:43
上传
评论 3
收藏 1.48MB RAR 举报
温馨提示
通过Qt提供的QTcpServer和QTcpSocket实现一个简单的网络聊天室。
资源推荐
资源详情
资源评论
收起资源包目录
TCP Socket聊天室.rar (49个子文件)
TCP Socket聊天室
TcpChat-build-desktop
Makefile.Debug 7KB
release
Makefile.Release 7KB
Makefile 6KB
debug
TcpChat.exe 1.65MB
moc_server.cpp 3KB
moc_tcpclientsocket.o 156KB
tcpclientsocket.o 150KB
moc_tcpserver.o 230KB
server.o 234KB
tcpserver.o 273KB
main.o 215KB
moc_tcpclientsocket.cpp 3KB
moc_tcpserver.cpp 3KB
moc_server.o 223KB
TcpChat
main.cpp 269B
tcpserver.h 714B
server.h 523B
server.cpp 1KB
tcpclientsocket.h 434B
TcpChat.pro.user 15KB
Makefile.Debug 7KB
release
tcpserver.cpp 2KB
Makefile.Release 7KB
tcpclientsocket.cpp 654B
Makefile 6KB
debug
moc_server.cpp 3KB
moc_tcpclientsocket.o 155KB
tcpclientsocket.o 149KB
moc_tcpserver.o 198KB
server.o 176KB
tcpserver.o 199KB
main.o 183KB
moc_tcpclientsocket.cpp 3KB
moc_tcpserver.cpp 3KB
moc_server.o 165KB
TcpChat.pro 403B
TcpClient
main.cpp 187B
TcpClient.pro 319B
tcpclient.h 1KB
TcpClient.pro.user 18KB
tcpclient.cpp 5KB
TcpClient-build-desktop
Makefile.Debug 6KB
release
Makefile.Release 6KB
Makefile 6KB
debug
tcpclient.o 250KB
main.o 183KB
TcpClient.exe 940KB
moc_tcpclient.cpp 3KB
moc_tcpclient.o 200KB
共 49 条
- 1
flownleaves
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页