#include "tcpclient.h"
#include "ui_tcpclient.h"
#include <QMessageBox>
TcpClient::TcpClient(QWidget *parent) :
QWidget(parent),
ui(new Ui::TcpClient)
{
ui->setupUi(this);
QFont font("ZYSong18030",12);
this->setFont(font);
this->setWindowTitle(tr("TCP Client"));
connect(ui->pushButtonSend,SIGNAL(clicked()),this,SLOT(slotSend()));//发送信息
connect(ui->pushButtonEnter,SIGNAL(clicked()),this,SLOT(slotEnter()));//发送数据
serverIP = new QHostAddress();//服务器
port = 8010;
ui->lineEditPort->setText(QString::number(port));
ui->pushButtonSend->setEnabled(false);
status = false;
}
TcpClient::~TcpClient()
{
delete ui;
}
void TcpClient::slotEnter()//进入聊天室的条件判断
{
if(! status)
{
QString ip = ui->lineEditServerIP->text(); //获取服务器ip
if(!serverIP->setAddress(ip)) //设置服务器ip
{
QMessageBox::information(this,tr("error"),tr("server ip address error!"));
return;
}
if(ui->lineEditUser->text() == "")
{
QMessageBox::information(this,tr("error"),tr("user name error!"));
return;
}
userName = ui->lineEditUser->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 char room");
length = tcpSocket->write(msg.toLatin1(),msg.length());
if(length != msg.length())
{
return;
}
tcpSocket->disconnectFromHost();
status = false;
}
}
void TcpClient::slotConnected()
{
int length = 0;
ui->pushButtonSend->setEnabled(true);
ui->pushButtonEnter->setText(tr("离开聊天室"));
QString msg = userName + tr("enter char room");
length = tcpSocket->write(msg.toLatin1(),msg.length());
if(length != msg.length())
{
return;
}
}
void TcpClient::slotDisconnected()
{
ui->pushButtonSend->setEnabled(false);
ui->pushButtonEnter->setText(tr("进入聊天室"));
}
void TcpClient::slotSend() //发送信息
{
if(ui->lineEditSend->text() == "")
{
return;
}
QString msg = userName + ":" + ui->lineEditSend->text();//将用户名和内容发送服务器
tcpSocket->write(msg.toLatin1(),msg.length());
ui->lineEditSend->clear();
}
void TcpClient::dataReceived()
{
while(tcpSocket->bytesAvailable() > 0) //一直等待数据发送过来 判断套接字内容是否有数据
{
QByteArray datagram;
datagram.resize(tcpSocket->bytesAvailable());
tcpSocket->read(datagram.data(),datagram.size()); //读报文数据和大小
QString msg = datagram.data();
ui->listWidgetContent->addItem(msg.left(datagram.size()));
}
}
评论0