0

我有以下功能:

if (socket==nil)
  socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
if (elBuffer==nil) 
  elBuffer = [[NSMutableData alloc] init];
}

if ([socket isDisconnected]) {
  NSError *err = nil;
  [socket connectToHost:elControlador.ip onPort:9761 error:&err]
}

[socket writeData:@"A01" withTimeout:30 tag:1];
[socket writeData:@"A02" withTimeout:30 tag:1];
[socket writeData:@"A03" withTimeout:30 tag:1];
[socket writeData:@"A04" withTimeout:30 tag:1];
[socket writeData:@"A05" withTimeout:30 tag:1];
[socket readDataWithTimeout:30 buffer:elBuffer bufferOffset:0 maxLength:-1 tag:1];

它工作得很好,除了套接字服务器在两次写入之间需要一秒钟左右的时间才能工作。我想知道是否有人遇到过同样的问题,并且可以阐明如何实现这一目标。谢谢。

4

2 回答 2

1

我能够使用以下方法使其正常工作:

int i=0;
for(id aItem in aIDs) {
  NSString *directCommand = [NSString stringWithFormat:@"A%@",aItem];
  [self performSelector:@selector(fSend:) withObject:directCommand afterDelay:(2.0*i)];
  i++;
}
[socket readDataWithTimeout:30 buffer:elBuffer bufferOffset:0 maxLength:-1 tag:1];

-(void)fSend : (NSString *)aCommand {
  [socket writeData:aCommand withTimeout:30 tag:1];
}

这让我在执行 writeData 之间有 2 秒的时间,而不必冻结应用程序,也不会用写入淹没我的设备。

于 2013-02-21T12:50:55.260 回答
1

如果您希望客户端在写入这些字符串之间等待:

  • 将它们放入一个数组中。
  • 使用重复NSTimer
  • 在定时器回调中,一次写一行,直到数组用完,然后使定时器失效。
于 2013-02-18T04:42:41.990 回答