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];

ソケットサーバーが機能するために書き込みの間に1秒ほどかかるという事実を除いて、それは完璧に機能します。誰かが同じ問題に遭遇し、これを達成する方法に光を当てることができるかどうか疑問に思いました。ありがとう。

4

2 に答える 2

1

クライアントがこれらの文字列を書き込むまで待機するようにするには、次のようにします。

  • それらを配列に入れます。
  • 繰り返し使用するNSTimer
  • タイマーコールバックでは、配列が使い果たされるまで一度に1行ずつ書き込み、タイマーを無効にします。
于 2013-02-18T04:42:41.990 に答える
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 に答える