我遇到AsyncUdpSocket问题。
我曾经连接到服务器,发送一些数据并获得一些响应。现在因为我不知道服务器的实际地址,我不得不改变我的代码并将数据发送到广播地址255.255.255.255。
这是我的代码:
NSString *bchost = @"255.255.255.255";
NSString *host = @"10.1.0.1";
int udpPort = 6001;
AsyncUdpSocket *udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[udpSocket bindToPort:udpPort error:nil];
[udpSocket enableBroadcast:YES error:nil];
NSError *error = nil;
if ([udpSocket connectToHost:bchost onPort:udpPort error:&error])
{
[udpSocket receiveWithTimeout:10 tag:0];
[self sendToUDPServer:@"HELLO"];
}
所以,问题是它适用于“主机”但不适用于“bchost”。在这两种情况下,我在服务器端看到接收到数据并且答案被发送到发送方的地址(应该是iOS设备),但是在设备上,当我将数据发送到bchost时,我没有得到数据。
知道我缺少什么吗?
答案 0 :(得分:4)
好的,不幸的是,所有答复对我都不起作用,但我找到了解决方案,最后;)
NSString *bcHost = @"255.255.255.255";
NSString *anyHost = @"0.0.0.0";
int UDP_SOCKET_PORT = 6001;
int DISCOVERY_PORT = 6003;
udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[udpSocket bindToAddress:anyHost port:DISCOVERY_PORT error:nil];
[udpSocket enableBroadcast:YES error:nil];
[udpSocket receiveWithTimeout:10 tag:0];
[udpSocket sendData:[@"Hello" dataUsingEncoding:NSASCIIStringEncoding] toHost:bcHost port:UDP_SOCKET_PORT withTimeout:-1 tag:0];
如果它背后有服务器,它将触发响应,这也将允许从服务器获取ip以进行进一步处理。
答案 1 :(得分:3)
您正在“连接”主机。根据{{3}},这意味着您只能获得源IP地址为255.255.255.255的UDP数据包。连接为UDP建立一对一关系,以便接收源地址与连接地址不同的接收数据包。
如果你没有连接(你必须改变你的发送线以定位广播地址),它应该工作。您将发送toHost:bcHost
- 然后您的接收应该获得所有发往其端口的数据包。
答案 2 :(得分:3)
根据Arthur的回答,这是工作代码。我想知道接收是否应该在发送之前启动,只是为了确保在接收准备好之前我们不会错过非常快速的回复,但到目前为止,在我的情况下似乎没有必要。另外,请参考this post了解如何创建接收方法。
AsyncUdpSocket *udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[udpSocket bindToPort:1234 error:nil ];
[udpSocket enableBroadcast:YES error:nil];
NSData* data=[messageToSend dataUsingEncoding:NSUTF8StringEncoding];
if ([udpSocket sendData:data toHost:@"255.255.255.255" port:4321 withTimeout:3 tag:0])
{
//2 second timeout. onUdpSocket methods will provide results
[udpSocket receiveWithTimeout:2 tag:0];
}
答案 3 :(得分:0)
我可能完全疯了,但似乎这是iOS上AsyncUdpSocket的常见问题。
在Google代码页上有几个与您的错误报告相似甚至相同的错误报告;人们抱怨他们在广播后无法接收Udp数据包,在某些情况下甚至根本没有。
http://code.google.com/p/cocoaasyncsocket/issues/list?can=2&q=AsyncUdpSocket+receive