2011-03-15 99 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); 

史詩失敗。