结果视图(本机IP地址用*掩盖了):
一,定义
服务器端:
myServer =new QTcpServer(this);
客户端:
myClient = new QTcpSocket(this);
二,得到本机的ip地址
QList<QHostAddress> addrs = QNetworkInterface::allAddresses(); //定义
for(int i=0;i<addrs.length();i++)
{
QHostAddress addr=addrs.at(i);
qDebug()<<addr.toString(); //显示出所有ip地址
if(addr.toString().contains("192."))
{
myAddr=addr.toString(); //将192开头的ip赋值给myAddr
break;
}
}
三,获取ip地址以及端口号,然后连接
ip地址和端口号直接手动从lineEdit获得(服务器和客户端一样)
myAddr =ui->lineEdit_1->text();
QString myPort = ui->lineEdit_2->text();
连接方法:
服务器端:
myServer->listen(QHostAddress(myAddr), myPort.toUInt());
客户端:
myClient->connectToHost(QHostAddress(servIP),servPort.toUInt());
四,服务器端或客户端读取对方内容
服务器端读取:
QTcpSocket *client = (QTcpSocket*)this->sender();
QString str1=QString("客户端[%1:%2] 说:")
.arg(client->peerAddress().toString())
.arg(client->peerPort());
QString msg1;
QString msg2;
while(!client->atEnd())
{
msg1.append(QString(client->readAll()));
//QString str=QString(client->readAll());
//msg=QString("%1%2").arg(str1).arg(str2);
//ui->textEdit->append(msg);
}
msg2=QString("%1%2").arg(str1).arg(msg1);
ui->textEdit->append(msg2);
客户端读取:
QString msg;
QString str1,str2;
str1=QString("服务器[%1:%2] 说:").arg(myClient->peerAddress().toString()).arg(myClient->peerPort());
while(!myClient->atEnd())
{
str2.append(QString(myClient->readAll()));
}
msg=QString("%1%2").arg(str1).arg(str2);
ui->textEdit->append(msg);
五,服务器端或客户端向对方发送
服务器端:
QString ip=ui->lineEdit_3->text();
QString port=ui->lineEdit_4->text(); //获取客户端的ip和端口号
for(int i=0;i<Array.length();i++)
{
if(Array.at(i)->peerAddress().toString() ==ip)
{
if(Array.at(i)->peerPort()== port.toUInt()) //找到对应客户端的ip和端口号,然后发送
{
QString msg=ui->textEdit_2->toPlainText();
Array.at(i)->write(msg.toUtf8()); // toUtf8支持发送汉字
ui->textEdit_2->clear(); //数据发送后清空
break;
}
}
}
客户端:
QString msg=ui->textEdit_2->toPlainText();
int ret=myClient->write(msg.toUtf8()); // toUtf8支持发送汉字
if(ret<=0)
return;
ui->textEdit_2->clear(); //数据发送后清空
六,断开
服务器端:
QTcpSocket *client=(QTcpSocket *)this->sender();
QString msg=QString("客户端[%1:%2] 退出!")
.arg(client->peerAddress().toString())
.arg(client->peerPort());
ui->textEdit->append(msg);
//删除对应客户端
for(int i=0;i<Array.length();i++)
{
if(Array.at(i)->peerAddress()==client->peerAddress())
{
if(Array.at(i)->peerPort()== client->peerPort())
{
Array.removeAt(i);
break;
}
}
}
ui->pushButtonLink->setEnabled(true); //断开后,键恢复使用
客户端:
QString msg="服务器退出";
ui->textEdit->append(msg);
ui->pushButtonLink->setEnabled(true); //断开后,键恢复使用
七,将按钮禁用和解开
ui->pushButtonLink->setEnabled(false); //禁用
ui->pushButtonLink->setEnabled(true); //解开
八,服务器端和客户端的资源链接
https://download.csdn.net/download/qq_46423166/12363175