#include "tcpclient.h"
#include <QMessageBox>
#include <QHostInfo>
#include<QDebug>
TcpClient::TcpClient(QWidget *parent,Qt::WindowFlags f)
: QDialog(parent,f)
{
setWindowTitle(tr("TCP Client"));
contentListWidget = new QListWidget;
sendLineEdit = new QLineEdit;
sendBtn = new QPushButton(QStringLiteral("发送"));
userNameLabel = new QLabel(QStringLiteral("用户名:"));
userNameLineEdit = new QLineEdit;
serverIPLabel = new QLabel(QStringLiteral("服务器地址:"));
serverIPLineEdit = new QLineEdit;
portLabel = new QLabel(QStringLiteral("端口:"));
portLineEdit = new QLineEdit;
enterBtn= new QPushButton(QStringLiteral("进入聊天室"));
mainLayout = new QGridLayout(this);
mainLayout->addWidget(contentListWidget,0,0,1,2);
mainLayout->addWidget(sendLineEdit,1,0);
mainLayout->addWidget(sendBtn,1,1);
mainLayout->addWidget(userNameLabel,2,0);
mainLayout->addWidget(userNameLineEdit,2,1);
mainLayout->addWidget(serverIPLabel,3,0);
mainLayout->addWidget(serverIPLineEdit,3,1);
mainLayout->addWidget(portLabel,4,0);
mainLayout->addWidget(portLineEdit,4,1);
mainLayout->addWidget(enterBtn,5,0,1,2);
status = false;
port = 8010;
portLineEdit->setText(QString::number(port));
serverIP =new QHostAddress();
connect(enterBtn,SIGNAL(clicked()),this,SLOT(slotEnter()));
connect(sendBtn,SIGNAL(clicked()),this,SLOT(slotSend()));
sendBtn->setEnabled(false);
}
TcpClient::~TcpClient()
{
}
void TcpClient::slotEnter()
{
if(!status)
{
QString ip = serverIPLineEdit->text();
if(!serverIP->setAddress(ip))
{
QMessageBox::information(this,tr("error"),tr("server ip address error!"));
return;
}
if(userNameLineEdit->text()=="")
{
QMessageBox::information(this,tr("error"),tr("User name error!"));
return;
}
userName=userNameLineEdit->text();
tcpSocket = new QTcpSocket(this);
connect(tcpSocket,SIGNAL(connected()),this,SLOT(slotConnected()));
connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
tcpSocket->connectToHost(*serverIP,port);
status=true;
}
else
{
// int length=0;
// QString msg=userName+tr(":Leave Chat Room");
// std::string msgstd=msg.toStdString();
// const char *msgtoc=msgstd.c_str();
// if((length=tcpSocket->write(msgtoc,msg.length()))!=msg. length())
// {
// return;
// }
QString msg=userName+QStringLiteral(":Leave Chat Room");
QByteArray datasend =msg.toLocal8Bit();
tcpSocket->write(datasend);
tcpSocket->disconnectFromHost();
status=false;
}
}
void TcpClient::slotConnected()
{
sendBtn->setEnabled(true);
enterBtn->setText(QStringLiteral("离开"));
QString msg=userName+QStringLiteral(":Enter Chat Room");
QByteArray datasend =msg.toLocal8Bit();
tcpSocket->write(datasend);
// qDebug()<<msg;
// std::string msgstd=msg.toStdString();
// const char *msgtoc=msgstd.c_str();
// qDebug()<<msgtoc; qDebug()<<"msgtoc";
// //if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length())
// if((length=tcpSocket->write(msgtoc,msg.length()))!=msg.length())
// {
// return;
// }
}
void TcpClient::slotSend()
{
if(sendLineEdit->text()=="")
{
return ;
}
QString msg=userName+":"+sendLineEdit->text();
QByteArray datasend =msg.toLocal8Bit();
tcpSocket->write(datasend);
sendLineEdit->clear();
}
void TcpClient::slotDisconnected()
{
sendBtn->setEnabled(false);
enterBtn->setText(QStringLiteral("进入聊天室"));
}
void TcpClient::dataReceived()
{
// while(tcpSocket->bytesAvailable()>0)
// {
// QByteArray datagram;
// datagram.resize(tcpSocket->bytesAvailable());
// tcpSocket->read(datagram.data(),datagram.size());
// QString msg=datagram.data();
// contentListWidget->addItem(msg.left(datagram.size()));
// }
QByteArray buffer;
//读取缓冲区数据
buffer = tcpSocket->readAll();
if(!buffer.isEmpty())
{
QString str = QString::fromLocal8Bit(buffer);
//刷新显示
contentListWidget->addItem(str);
}
}

Liuzwang
- 粉丝: 1
最新资源
- 大流量VPDN业务实现及网络优化方案探索.docx
- 附录B综合布线系统工程电气测试方法及测试内容.doc
- 电气工程其自动化考研总况.doc
- 计算机试卷及答案.doc
- 践行目标导向的项目管理治理.doc
- flare-硬件开发资源
- 计算机信息技术在能源管理中的应用.docx
- 项目管理理论在市政工程管理中的运用研究.docx
- 大数据时代下软件技术的发展和应用.docx
- 信息系统项目管理师第三版十大管理输入输出及管理工具技术.docx
- 机器学习(预测模型):Hacker News情感分析的数据集
- 数控加工工艺与编程项目六G符合循环教案.doc
- 大数据时代集团公司业财融合对财务共享的影响.docx
- 生活中的人工智能.docx
- 秒懂HTTPS技术接口.docx
- 明德小学教育信息化工作会议记录.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


