由于无限循环,IOS应用程序无法呈现

时间:2015-01-25 03:30:00

标签: ios c server

您好我正在为cos编写一个纯粹用c编写的原始echo服务器。当我进入无限循环以接受传入连接时,会出现问题。放置接受循环的最佳位置在哪里,是一个无限循环(在我的情况下,我想要的)最好的实现。

这是流程 在app delegate中设置应用程序内部的根控制器。 控制器内部调用启动服务器功能(此功能永不返回)

while(true)
{
    @autoreleasepool
    {
        int exchangeSocket = accept(socket, NULL,NULL);
        if(recv(exchangeSocket, buffer, sizeof(buffer), 0) == -1)
        {
            NSLog(@"%@", @"Error");
        }
        else
        {
            //do something with data received
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的方法至少有两个问题。首先,您不应该在主线程上运行无限循环,因为该线程已经用于主运行循环。使用您自己的无限循环(无论在哪里)阻止此循环将中断事件处理。这就是为什么您的应用程序无法呈现的答案。 reference指定:

  

应始终在后台线程上执行冗长的任务(或可能的长度任务)。涉及网络访问,文件访问或大量数据处理的任何任务都应使用GCD或操作对象异步执行

但是,iOS确实允许您使用POSIX接口创建线程,例如它提供pthread_create和朋友。您应该能够在这样的线程中运行代码而不会阻止您的应用。

其次,(但可能不太感兴趣)使用POSIX网络API有点discouraged(由于这些API无法打开无线电)而支持其他接口。最接近您喜欢的是CFSocket(也是C接口)。