0

我有这两行代码。我需要一个只接收数据的套接字

第一种方法有效,我收到日期(来自第二种方法中的 ip/port)

第二种方法总是返回 false。

我不明白其中的区别,也找不到问题所在。

任何人都知道如何解决这个问题或我做错了什么?

 udpSocket = new QUdpSocket(); 
bool result = udpSocket->bind(QHostAddress::Any, 7755);


QHostAddress address("the ip") 
udpSocket = new QUdpSocket(); 
bool result = udpSocket->bind(address , 7755);
4

1 回答 1

1

在第一种方法中,当您绑定套接字bind(QHostAddress::Any, 7755)时,它将侦听系统上的所有接口;因此它将成功绑定知道至少一个接口已启动。

在第二种方法中,当您设置 IP 地址时,QHostAddress address("the ip")您需要确保接口在您的系统上使用该 IP 地址(ipconfig在 Win / ifconfigLinux 上使用)。现在,构造函数将自动从传递的字符串(“ip 地址”)中检测它是 IPv4 还是 IPv6。如果您没有指定类型,那么您可以将地址构造为Any并将您的套接字绑定到它:

QString string("192.168.1.1");
QHostAddress address(QHostAddress::Any);
address.setAddress(string);
udpSocket = new QUdpSocket();
bool result = udpSocket->bind(address , 7755);
于 2018-05-02T21:34:45.663 回答