#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->show();
ui->message_text->setEnabled(false);
ui->btn_send->setEnabled(false);
server_socket=new QTcpServer;
client_socket=new QTcpSocket;
t1=new QTimer;
connect(t1,&QTimer::timeout,this,&MainWindow::update_state);
this->setWindowTitle("TCP-Server");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::new_Client_Connection()
{
client_socket=server_socket->nextPendingConnection();
t1->start(100);
ui->message_text->setEnabled(true);
connect(client_socket,&QTcpSocket::readyRead,this,&MainWindow::recv_message);
ui->textBrowser->append("");
ui->textBrowser->append("**客户端连接成功");
ui->textBrowser->append(QString("**客户端地址:%1").arg(client_socket->peerAddress().toString()));
ui->textBrowser->append(QString("**客户端端口:%1").arg(client_socket->peerPort()));
}
void MainWindow::on_btn_listen_clicked()
{
QString IP=ui->server_ip->text();
int port=ui->server_port->value();
QHostAddress addr(IP);
server_socket->listen(addr,port);
ui->textBrowser->append("**开始监听……");
ui->textBrowser->append(QString("**服务器地址:%1").arg(IP));
ui->textBrowser->append(QString("**服务器端口:%1").arg(port));
ui->btn_listen->setEnabled(false);
ui->server_ip->setEnabled(false);
ui->server_port->setEnabled(false);
connect(server_socket,&QTcpServer::newConnection,this,&MainWindow::new_Client_Connection);
}
void MainWindow::recv_message()
{
QString message=client_socket->readAll();
ui->textBrowser->append("");
ui->textBrowser->append(QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss"));
ui->textBrowser->append(QString("[client]:%1").arg(message));
}
void MainWindow::send_message()
{
client_socket->write(ui->message_text->text().toUtf8());
QString message=ui->message_text->text();
ui->textBrowser->append("");
ui->textBrowser->append(QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss"));
ui->textBrowser->append(QString("[server]:%1").arg(message));
ui->message_text->clear();
}
void MainWindow::update_state()
{
if(ui->message_text->text().length()>0){
ui->btn_send->setEnabled(true);
}
else{
ui->btn_send->setEnabled(false);
}
}
void MainWindow::on_btn_send_clicked()
{
send_message();
}