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