您好我正在为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
}
}
}
答案 0 :(得分:0)
您的方法至少有两个问题。首先,您不应该在主线程上运行无限循环,因为该线程已经用于主运行循环。使用您自己的无限循环(无论在哪里)阻止此循环将中断事件处理。这就是为什么您的应用程序无法呈现的答案。 reference指定:
应始终在后台线程上执行冗长的任务(或可能的长度任务)。涉及网络访问,文件访问或大量数据处理的任何任务都应使用GCD或操作对象异步执行
但是,iOS确实允许您使用POSIX接口创建线程,例如它提供pthread_create
和朋友。您应该能够在这样的线程中运行代码而不会阻止您的应用。
其次,(但可能不太感兴趣)使用POSIX网络API有点discouraged(由于这些API无法打开无线电)而支持其他接口。最接近您喜欢的是CFSocket
(也是C接口)。