我正在尝试使用CocoaASyncSocket开始创建一个简单的UDP服务器和客户端。我几乎复制了here
示例中的代码更新:
我已尝试运行提供的示例,但它们似乎不适用于我提供的主机地址+端口。如果我的客户端+服务器在同一个wifi上,我会为那些(在客户端)填写什么?
我的服务器:
-(void)startServer{
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:PORT error:&error])
{
NSLog(@"Error starting server (bind): %@", error);
return;
}
if (![udpSocket beginReceiving:&error])
{
[udpSocket close];
NSLog(@"Error starting server (recv): %@", error);
return;
}
NSLog(@"Udp Echo server started on %@:%i",[udpSocket localHost_IPv4],[udpSocket localPort]);
isRunning = YES;
}
我的客户:
-(void)setupSocket{
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:HOST_PORT error:&error])
{
NSLog(@"Error binding: %@", error);
return;
}
if (![udpSocket beginReceiving:&error])
{
[udpSocket close];
NSLog(@"Error receiving: %@", error);
return;
}
NSLog(@"ready");
}
- (IBAction)send:(id)sender
{
NSString *msg = @"testerrrr";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:HOST_IP port:HOST_PORT withTimeout:-1 tag:0];
NSLog(@"sent message to server");
}
我不相信我的问题在于服务器或套接字的初始化,但可能在我选择的IP + PORT中。现在我在iOS模拟器上运行服务器,在真实设备上运行客户端。从设备发送数据时,我可以看到数据包已经出去,但服务器没有收到任何数据包。
我将它设置为绑定端口1234,并且客户端将其发送到我从“whatismyip.com”获得的服务器地址。我也试过逆转角色,但仍然没有成功。
此外,当我尝试向自身发送数据时(例如服务器 - >服务器),这有效,但两者之间没有运气!
这似乎是一项相当简单的任务,但却无法让它发挥作用。感谢帮助!
答案 0 :(得分:0)
正如我最初所怀疑的那样,问题在于我代表客户输入的地址。拇指的规则是:
希望有所帮助!