同一端口是否可以绑定到多个IP上(关于Socket编程中地址与端口绑定那些事)
一塊網卡有多個IP,是否能夠將同一個端口綁定在多個IP地址上?
廢話不多說,上源碼:
【源碼1】
輸出結果:
[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编程中地址与端口绑定那些事)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTSP协议-中文定义
- 下一篇: LGwin平板 怎么装系统 LGwin平