我试图通过创建tcp / ip连接发送一些在目标c中在服务器端创建波形的十六进制数据包。我的问题是我能够发送数据并且还可以在服务器上看到波形然而,由于网络延迟,有时波形变得重叠(原因是服务器在5分钟后尝试同步数据包)。我的问题基本上是如何以这样的方式将数据包发送到服务器,直到数据包被同步,我不再向服务器发送另一个包
dispatch_queue_t connectionTest=dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(connectionTest, ^{
if(outputStream)
{
NSInteger sizeOfPacket=13;
unsigned char myPacket[13];
unsigned char crcCal=0;
myPacket[0]=START_OF_HEADER;
myPacket[1]=START_OF_TEXT;
myPacket[2]=8;
myPacket[3]=0x6a;
myPacket[4]=0x06;
myPacket[5]=0x80;
myPacket[6]=Some value;//
myPacket[7]=0x80;
myPacket[8]=Some value;//
myPacket[9]=0x54;//changed 54 to 50
myPacket[10]=0x04;
for (int j=3;j<myPacket[2]+3;j++)
{
crcCal=crcTable[crcCal^myPacket[j]];
}
myPacket[11]=crcCal;
myPacket[12]=END_OF_TEXT;
NSLog(@"crc value is %c",crcCal);
NSData* dataPacket = [NSData dataWithBytes:(const void *)myPacket length:sizeof(unsigned char)*sizeOfPacket];
[outputStream write:[dataPacket bytes] maxLength:[dataPacket length]];
}
});
答案 0 :(得分:0)
一种方法可能是dispatch_suspend
发送数据包的块内的传出队列,然后dispatch_resume
从任何代码接收来自服务器的确认的传出队列。