Qt的網絡通信(以一對一聊天室為例)
一、以一對一(服務器,客戶端)為例
1、服務器:
1、在目錄文件 .pro文件中 QT += core gui network 添加network
2、在.h 文件中,定義
QTcpServer* server;
QTcpSocket* socket; 記得添加頭文件
3、 ui->setupUi(this);
server = new QTcpServer;
server->listen(QHostAddress::Any,1111);//等待連接
connect(server,SIGNAL(newConnection()),this,SLOT(new_connect()));//記得添加槽信號
4、//找到與服務器鏈接的客戶端
void MainWindow::new_connect()
{
socket = server->nextPendingConnection();
connect(socket,SIGNAL(readyRead()),this,SLOT(ready_read()));
ui->pushButton->setEnabled(true);
}
5、
void MainWindow::ready_read()
{
socket->read(buf,sizeof(buf));
ui->read_listWidget->addItem(buf);
}
6、
void MainWindow::on_pushButton_clicked()
{
socket->write(ui->lineEdit->text().toStdString().c_str(),ui->lineEdit->text().length());//發送內容給客戶端
ui->read_listWidget->addItem("server:"+ui->lineEdit->text());
ui->lineEdit->setText(" ");\\清空寫的內容
2、客戶端 (是通過IP地址和端口號來進行連接的)
1、+network
2、定義socket
3、
void MainWindow::on_conncet_buf_clicked()
{
socket->connectToHost(ui->lineEdit_2->text(),ui->lineEdit_3->text().toUInt());
connect(socket,SIGNAL(readyRead()),this,SLOT(ready_read()));
}
4、
void MainWindow::ready_read()
{
char buf[255] = {};
socket->read(buf,sizeof(buf));
ui->read_listWidget->addItem(buf);
}
5、void void MainWindow::on_send_btn_clicked()
{
socket->write(ui->lineEdit->text().toStdString().c_str(),buf+ui->lineEdit->text().toAscii().length());//文字輸出,要在mian.c中添加對中文的處理;
ui->read_listWidget->addItem(buf+ui->lineEdit->text());
ui->lineEdit->setText(" ");
}
Qt的網絡通信(以一對一聊天室為例)