客户端使用特定的端口号与服务器进行通信,这是在进行网络编程开发时候经常容易遇到的问题。这篇博客是关于网络编程中客户端编写的小总结。
绑定端口号
在Qt的Socket开发中,有丰富的函数可以调用,要实现客户端绑定指定的端口,只需要在创建Socket之后,调用bind(port)函数进行端口的绑定即可。
绑定IP和端口
直接调用QHostAddress构造函数产生一个IP地址,调用bind()函数的另一个重载函数bind(IP,port)进行IP和端口的绑定。为了调试与上网工作两不误,这里有一个小技巧,将电脑网卡配置为多IP,客户对调试的IP进行绑定,同时不影响主IP的正常使用,可以参照我的博客“Windows同时使用两个IP上网”。截取部分代码如下
QHostAddress localIP = QHostAddress("30.252.22.10");
IP = IPaddrLineEdit->text();
port = portLineEdit->text().toInt();
clientSocket->abort();
if(clientSocket->bind(localIP,42005))
{
qDebug() << "1 LocalHost:" << localIP.toString();
qDebug() << "2 localPort:" << clientSocket->localPort();
}
clientSocket->connectToHost(IP,port);
自动搜索本机IP
获取本机所有IP,QNetworkInterface类中提供了一个便利的静态函数allAddresses(),用于返回一个QHostAddress主机地址列表。参考自https://blog.csdn.net/liang19890820/article/details/52273986。下面是获取本地IPv4的代码实现
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
{
if(address.toString().contains("127.0.")) continue;
qDebug() << "Address : " << address.toString();
}
else if (address.isNull()) // 主机地址为空
continue;
}