CocoaAsyncSocket UDP Simple Server&客户

时间:2015-08-25 16:51:29

标签: ios objective-c udp cocoaasyncsocket

我正在尝试使用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”获得的服务器地址。我也试过逆转角色,但仍然没有成功。

此外,当我尝试向自身发送数据时(例如服务器 - >服务器),这有效,但两者之间没有运气!

这似乎是一项相当简单的任务,但却无法让它发挥作用。感谢帮助!

1 个答案:

答案 0 :(得分:0)

正如我最初所怀疑的那样,问题在于我代表客户输入的地址。拇指的规则是:

  1. 如果S + C在同一台设备上运行。使用“localhost”作为主机地址
  2. 如果S + C在不同设备上运行,但在同一wifi连接上运行。在服务器上执行IFConfig并使用那里找到的IP。
  3. 如果S + C在不同的设备上运行且不共享相同的连接,则需要将端口从路由器转发到您的计算机。
  4. 希望有所帮助!