最近又遇到tcp问题,发现知识不用忘得好快!于是做了一个简单的demo。
先看下运行效果:
代码我已经上传到CSDN:
http://download.csdn.net/detail/u014597198/9689618
Github地址:
GitHub - ShaShiDiZhuanLan/Demo_TcpSocket_Qt: QTcpSocket客户端、服务端互发字符串的示例
码云地址:
https://gitee.com/ShaShiDiZhuanLan/TCP_Demo
今天做了个类似的项目,发现服务端获取局域网IP这里不准确,我们是要获取192.168.*.*的IP地址,
代码改为如下:
QString TcpSever::getIPAddress()
{
//获取局域网IP地址192.168.*.*
QString localHostName = QHostInfo::localHostName();
QHostInfo info = QHostInfo::fromName(localHostName);
foreach(QHostAddress address, info.addresses()) {
if (address.protocol() == QAbstractSocket::IPv4Protocol) {
return address.toString();
}
}
}
或者:
QString ip = QHostInfo::fromName(QHostInfo::localHostName()).addresses().last().toString();
获取本机外网地址修改:
//返回外网IP
QString TcpSever::returnOutIP()
{
QString tmp = GetHtml("https://ip.cn/");
qDebug() << "returnOutIP" << tmp;
return GetNetIP(tmp);
}
QString TcpSever::GetHtml(QString url)
{
QNetworkAccessManager *manager = new QNetworkAccessManager();
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
QByteArray responseData;
QEventLoop eventLoop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
eventLoop.exec();
responseData = reply->readAll();
return QString(responseData);
}
QString TcpSever::GetNetIP(QString webCode)
{
QString tmp = webCode.split("IP: ").last();
return tmp.split("\n<br").first();
}