我用Python编写了一个服务器(Twisted),现在想把它连接到iOS,但是遇到了一些麻烦。
这就是我连接服务器的方式:
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 3000, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
问题来自RunLoop。想象一下,我不想向服务器发送一条消息。然后我会这样做:
NSData *data = [[NSData alloc] initWithData:[message dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
但如果我不想一个接一个地发送两条消息怎么办?然后我可以用message1和message2运行代码......但是客户端真正发送的是message1 + message2的串联,而不是两个不同的消息。我想这是因为我在同一个“循环”中将消息写入outputStream,所以当流最终决定发送数据时,它会发送两个...我无法找出任何解决方案。如果SERVER“非常快”地向CLIENT发送多条消息,也会发生同样的情况。我该怎么办?
答案 0 :(得分:0)
定义“协议” - 基本上是一种“语法”,它定义了参与者将理解的“语言”。
最简单的方法是定义标记和分隔符以及相应的解析器。
例如,您可以定义由单个char组成的消息,并且多个消息将由一个或多个空格分隔。然后你可以通过电汇发送:
A B C D E