Networking iPod客户端是否将数据永久发送到C服务器?

Networking iPod客户端是否将数据永久发送到C服务器?,networking,ios4,stream,client-server,read-write,Networking,Ios4,Stream,Client Server,Read Write,我通过TCP/IP在linux C服务器上安装了一个iOS客户端。我面临的问题是: 连接完成后,服务器等待数据(read()),并在从iPod收到数据后将其显示在屏幕上。然后它再次返回read(),以此类推。我可以读/写一次,但不能永久。代码是: -(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent case NSStreamEventHasSpaceAvailable:

我通过TCP/IP在linux C服务器上安装了一个iOS客户端。我面临的问题是: 连接完成后,服务器等待数据(read()),并在从iPod收到数据后将其显示在屏幕上。然后它再次返回read(),以此类推。我可以读/写一次,但不能永久。代码是:

-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent

      case NSStreamEventHasSpaceAvailable:
         event = @"NSStreamEventHasSpaceAvailable";
        connectButton.enabled = NO;
        disconnectButton.enabled = YES;

        if (theStream == oStream)
         {
         //send data                

             uint8_t buffer[11] = "I send this";             
             int len;

             len = [oStream write:buffer maxLength:sizeof(buffer)];
             if (len > 0)
            {
                NSLog(@"Data sent");
                [oStream close];
            }
         }

        break;
嗯。所以据我所知,一旦服务器端有读取,这个方法和案例就会自动运行。这在服务器上的第一个read()调用中非常有效,但在第二个调用中,服务器只是挂起一些数据。 我在xcode中的日志显示了发生的情况:

2011-06-17 16:23:50.154幻灯片结束[7430:207]>:nsstreamventopencompleted //其中一条小溪被打开了


2011-06-17 16:23:50.156幻灯片结尾[7430:207]看来我已经成功了。我不知道我在问题中发布的代码是否有错误(我不这么认为,因为它确实发送了我想要的消息),但我最终使用了另一种写作方式

这是使用的方法:

 -(NSInteger) writeToServer:(const uint8_t *) buf 
  {
     return [oStream write:buf maxLength:strlen((char*)buf)];    
  }
这是我使用的代码(而不是问题中发布的代码):

我还注意到,在read()和printf(msg)之后,服务器会向我显示一条消息,表示连接已终止,因此我更改了服务器端的代码,在服务器端检查服务器是否仍与客户端连接,如下所示:

check=recv(newsockf,buffer,256,MSG_PEEK | MSG_DONTWAIT)

if(!(检查<0&&errno==EAGAIN))
{
//闭合插座;
//接受();
}
……为此:

if((check < 0 && errno != EAGAIN))
{
  //close socket;
  //accept();
}
if((检查<0&&errno!=EAGAIN))
{
//闭合插座;
//接受();
}

它似乎成功了。现在它不会无缘无故地断开连接。问题已解决。

已使其正常工作,但只有在6小时后我才能回答我自己的问题-\u我那时会回来。
if(!(check < 0 && errno == EAGAIN))
{
  //close socket;
  //accept();
}
if((check < 0 && errno != EAGAIN))
{
  //close socket;
  //accept();
}