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?
任何特定的原因,你会如此低级别?除非你有特定的需求,否则我建议在标准Web容器中使用简单的Web框架。然后提供XML响应(例如RESTEasy或XStream)并在iOS端使用NSXMLParser。调试(使用您的Web浏览器),配置(带有线程管理的Tomcat等)更容易,并随着协议的发展而保持不变。我已经采取这种方法来快速将客户端/服务器程序放在一起。 – WhiteFang34 2011-03-15 08:28:49
我想过使用XML响应甚至Web服务,但它们太慢了。稍后,这些消息将变得更大并包含其他数据,如图像等。 – 2011-03-15 08:35:53
我不熟悉'LXSocket'来回答你的问题,但是我注意到你发送的长度是'message.length()'。这将返回字符数而不是字节数。你会想要从'getBytes(“UTF8”)'返回字节的长度。它现在不会解决你的问题,但是如果你开始发送127以上的字符,它会成为一个问题。 – WhiteFang34 2011-03-15 08:40:11