2011-03-15 164 views
1

我在编写一个小小的客户端 - 服务器程序。 服务器位于Java和客户端IOS中。 在服务器上,我使用java.net.ServerSocket并在客户端上使用LXSocket。从客户端发送数据(整数,双精度,浮点,UTF8字符串)到服务器工作完美,但当我试图发送一个UTF8字符串回到客户端它有点失败。我可以收到该消息,但不能将其转换为NSString。Java - Objective C Socket UTF8问题

的Java发送代码:

public void sendMessage(java.net.Socket socket) throws IOException { 
    DataOutputStream stream = new DataOutputStream(socket.getOutputStream()); 
    int i = swabInt(64); 
    stream.writeInt(i); 
    String message = "Message to send as UTF8."; 
    int len = swabInt(message.length()); 
    stream.writeInt(len); 
    stream.write(nachricht.getBytes("UTF8")); 
} 

IOS接收代码:

-(IBAction)createSocket { 
LXSocket *socket = [[[LXSocket alloc] init] autorelease]; 
[socket connect:@"localhost" port:11111]; 

int i = [socket readInt]; 
int len = [socket readInt]; 
NSData *data = [socket readBytesWithLength:len]; 
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 

接收流的作品,但是当我试图初始化它崩溃的NSString。 任何想法?

编辑

传输工作正常,但我发现了一些奇怪的事情。我尝试了这种代码:

NSString *test = @"The Message"; 
    const char *c = [test UTF8String];` 
NSString *string = [[NSString alloc] initWithUTF8String:c]; 
NSLog(@"Decoding: %s", string); 

但我的控制台说:

2011-03-17 22:51:27.555 Sockets[8641:207] Decoding: ¿Ø‚ 

那么,有没有办法从UTF8编码这个字符数组获得的NSString?

+0

任何特定的原因,你会如此低级别?除非你有特定的需求,否则我建议在标准Web容器中使用简单的Web框架。然后提供XML响应(例如RESTEasy或XStream)并在iOS端使用NSXMLParser。调试(使用您的Web浏览器),配置(带有线程管理的Tomcat等)更容易,并随着协议的发展而保持不变。我已经采取这种方法来快速将客户端/服务器程序放在一起。 – WhiteFang34 2011-03-15 08:28:49

+0

我想过使用XML响应甚至Web服务,但它们太慢了。稍后,这些消息将变得更大并包含其他数据,如图像等。 – 2011-03-15 08:35:53

+0

我不熟悉'LXSocket'来回答你的问题,但是我注意到你发送的长度是'message.length()'。这将返回字符数而不是字节数。你会想要从'getBytes(“UTF8”)'返回字节的长度。它现在不会解决你的问题,但是如果你开始发送127以上的字符,它会成为一个问题。 – WhiteFang34 2011-03-15 08:40:11

回答

2

好吧,我想通了...... 平原愚蠢......

NSLog(@"%s", theString); 

,而不是

NSLog(@"%@", theString); 

史诗失败。