2011-08-30 22 views
0

我正在通过套接字连接接收字符串消息,并且当我从关联的文件句柄接收字节时,我从它们创建一个字符串。从FileHandle通过CFSocket读取NSData中的分隔字符串消息

[NSString stringWithCString:[data bytes] encoding:NSASCIIStringEncoding] 

现在这种精品的,但正如我试图正确记录这些字符串,我得到他们的大部分时间,但在两者之间我得到一些垃圾字符。我试着用utf8bytes和ascii像上面那样(消息是ascii无论如何)。

我正在通过通知这样接收数据:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveData:) name:NSFileHandleDataAvailableNotification object:fileHandle]; 
[fileHandle waitForDataInBackgroundAndNotify]; 

我假定一次的消息的负载增加,错位串部分在日志中显示出来。该消息本身是干净的,并严格字母数字(加上分隔符@“;”和点在浮动)

或做的怪异的字符串部分与消息无关,我只是错误的使用套接字读取数据?

任何帮助表示赞赏!

回答

1

您可能正在用您转换数据的方式来清理数据。数据不保证以完美的C风格字符串边界传递。调用stringWithCString正在读取传递到空字符的每个数据缓冲区,然后处理剩余的任何字节。在执行任何转换之前,您应该累积所有数据缓冲区。

+0

感谢您的快速响应。但是如果我有一个或多或少连续的文本流进来,可以安全地进行转换。我可以将数据放入缓冲区,并始终扫描下一个分隔符,但也许可以给我提示来解决这个问题。扫描仪扫描字符串,所以再次出现转换问题,对吗?我必须去检查角色的数据字符吗? – DasAntonym

+0

好的,我想我会最终通过这个。这是我转换时遇到的问题,因此请忘记上面的注释。谢谢您的帮助! – DasAntonym

相关问题