首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSStream,发送/接收数据

NSStream,发送/接收数据
EN

Stack Overflow用户
提问于 2013-07-12 22:25:33
回答 1查看 679关注 0票数 0

我已经用Python (Twisted)编写了一个服务器,现在想用iOS连接它,但遇到了一些麻烦。

这是我连接到服务器的方式:

代码语言:javascript
复制
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上。假设我不想向服务器发送一条消息。然后我会这样做:

代码语言:javascript
复制
NSData *data = [[NSData alloc] initWithData:[message dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];

但是如果我不想一个接一个地发送两条消息呢?然后我就可以用message1和message2运行代码了。但是客户端真正发送的是message1+message2的串联,而不是两个不同的消息。我猜这是因为我在同一个“循环”中将消息写入outputStream,所以当流最终决定发送数据时,它会同时发送两个...我想不出任何解决办法。如果服务器“非常快”地向客户端发送多条消息,也会发生同样的情况。我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 22:54:54

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

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

例如,您可能定义了一个由单个字符组成的消息,多个消息将由一个或多个空格分隔。然后,您可以通过网络发送以下内容:

A、B、C、D、E

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17617229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档