NSStream,发送/接收数据

时间:2013-07-12 14:25:33

标签: ios objective-c nsstream

我用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发送多条消息,也会发生同样的情况。我该怎么办?

1 个答案:

答案 0 :(得分:0)

定义“协议” - 基本上是一种“语法”,它定义了参与者将理解的“语言”。

最简单的方法是定义标记和分隔符以及相应的解析器。

例如,您可以定义由单个char组成的消息,并且多个消息将由一个或多个空格分隔。然后你可以通过电汇发送:

A B C D E