日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

同一端口是否可以绑定到多个IP上(关于Socket编程中地址与端口绑定那些事)

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同一端口是否可以绑定到多个IP上(关于Socket编程中地址与端口绑定那些事) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一塊網卡有多個IP,是否能夠將同一個端口綁定在多個IP地址上?

廢話不多說,上源碼:
【源碼1】

#include <QAbstractSocket> #include <QHostAddress>int main(int argc, char *argv[]) {QAbstractSocket *qAbsSocket1 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QAbstractSocket *qAbsSocket2 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QHostAddress addr1("172.20.1.177");QHostAddress addr2("192.168.199.177");int port1 = 7777;int port2 = 7778;bool bindOK;bindOK = qAbsSocket1->bind(addr1, port1);printf("[1] qAbsSocket1 bind port:%d to addr:%s %s.\n", port1, addr1.toString().toLocal8Bit().data(), bindOK?"ok":"fail");bindOK = qAbsSocket1->bind(addr1, port2);printf("[2] qAbsSocket1 bind port:%d to addr:%s %s.\n", port2, addr1.toString().toLocal8Bit().data(), bindOK ? "ok" : "fail");bindOK = qAbsSocket1->bind(addr2, port1);printf("[3] qAbsSocket1 bind port:%d to addr:%s %s.\n", port1, addr2.toString().toLocal8Bit().data(), bindOK ? "ok" : "fail");}

輸出結果:
[1] qAbsSocket1 bind port:7777 to addr:172.20.1.177 ok.
QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState
[2] qAbsSocket1 bind port:7778 to addr:172.20.1.177 fail.
QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState
[3] qAbsSocket1 bind port:7777 to addr:192.168.199.177 fail.
Press any key to continue …

【結論1】
同一個Socket只可以將1個端口綁定到1個地址上。

【源碼2】

#include <QAbstractSocket> #include <QHostAddress>int main(int argc, char *argv[]) {QAbstractSocket *qAbsSocket1 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QAbstractSocket *qAbsSocket2 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QHostAddress addr1("172.20.1.177");QHostAddress addr2("192.168.199.177");int port1 = 7777;int port2 = 7778;bool bindOK;bindOK = qAbsSocket1->bind(addr1, port1);printf("[1] qAbsSocket1 bind port:%d to addr:%s %s.\n", port1, addr1.toString().toLocal8Bit().data(), bindOK?"ok":"fail");bindOK = qAbsSocket2->bind(addr1, port1);printf("[2] qAbsSocket2 bind port:%d to addr:%s %s.\n", port1, addr1.toString().toLocal8Bit().data(), bindOK ? "ok" : "fail");}

輸出結果:
[1] qAbsSocket1 bind port:7777 to addr:172.20.1.177 ok.
[2] qAbsSocket2 bind port:7777 to addr:172.20.1.177 fail.
Press any key to continue …

【結論2】
即使不同的Socket也不能重復綁定相同的地址和端口。

【源碼3】

#include <QAbstractSocket> #include <QHostAddress>int main(int argc, char *argv[]) {QAbstractSocket *qAbsSocket1 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QAbstractSocket *qAbsSocket2 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QHostAddress addr1("172.20.1.177");QHostAddress addr2("192.168.199.177");int port1 = 7777;int port2 = 7778;bool bindOK;bindOK = qAbsSocket1->bind(addr1, port1);printf("[1] qAbsSocket1 bind port:%d to addr:%s %s.\n", port1, addr1.toString().toLocal8Bit().data(), bindOK?"ok":"fail");bindOK = qAbsSocket2->bind(addr1, port2);printf("[2] qAbsSocket2 bind port:%d to addr:%s %s.\n", port2, addr1.toString().toLocal8Bit().data(), bindOK ? "ok" : "fail");}

輸出結果:
[1] qAbsSocket1 bind port:7777 to addr:172.20.1.177 ok.
[2] qAbsSocket2 bind port:7778 to addr:172.20.1.177 ok.
Press any key to continue …

【結論3】
不同的Socket可以將不同的端口綁定到相同的IP地址上。

【源碼4】

#include <QAbstractSocket> #include <QHostAddress>int main(int argc, char *argv[]) {QAbstractSocket *qAbsSocket1 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QAbstractSocket *qAbsSocket2 = new QAbstractSocket(QAbstractSocket::UdpSocket, NULL);QHostAddress addr1("172.20.1.177");QHostAddress addr2("192.168.199.177");int port1 = 7777;int port2 = 7778;bool bindOK;bindOK = qAbsSocket1->bind(addr1, port1);printf("[1] qAbsSocket1 bind port:%d to addr:%s %s.\n", port1, addr1.toString().toLocal8Bit().data(), bindOK?"ok":"fail");bindOK = qAbsSocket2->bind(addr2, port1);printf("[2] qAbsSocket2 bind port:%d to addr:%s %s.\n", port1, addr2.toString().toLocal8Bit().data(), bindOK ? "ok" : "fail");}

輸出結果
[1] qAbsSocket1 bind port:7777 to addr:172.20.1.177 ok.
[2] qAbsSocket2 bind port:7777 to addr:192.168.199.177 ok.
Press any key to continue …

【結論4】
不同的Socket可以將相同的端口綁定到不同的IP地址上。

【結論匯總】
1. 同一個Socket只可以將1個端口綁定到1個地址上。
2. 即使不同的Socket也不能重復綁定相同的地址和端口。
3. 不同的Socket可以將不同的端口綁定到相同的IP地址上。
4. 不同的Socket可以將相同的端口綁定到不同的IP地址上。

總結

以上是生活随笔為你收集整理的同一端口是否可以绑定到多个IP上(关于Socket编程中地址与端口绑定那些事)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。