0

これが質問です。Java サーバーからソケットを開き、objective-c を使用して UTF 文字列を送信しましたが、読み取れません。だから、私は何がうまくいかないのか興味がありますか??:

まず、Javaコードは次のとおりです。

DataInputStream in = new DataInputStream( server.getInputStream()); System.out.println(in.readUTF()); //Just holding, can't print out

完全なソース コードは次のとおりです。

http://www.tutorialspoint.com/java/java_networking.htm

次に、私の iOS クライアントのソース コードは次のとおりです。

NSString *requestStrFrmt = @"HEAD / HTTP/1.0\r\nHost: %@\r\n\r\n";

NSString *requestStr = [NSString stringWithFormat:requestStrFrmt, HOST];
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];

[asyncSocket writeData:requestData withTimeout:-1.0 tag:0];

iOS クライアントの完全なソース コード:

https://github.com/robbiehanson/CocoaAsyncSocket

私が引用したファイルパス: CocoaAsyncSocket / GCD / Xcode / SimpleHTTPClient / Mobile / SimpleHTTPClient / SimpleHTTPClientAppDelegate.m

IPとポートを変更するだけで、特別なことはしていません。出力は次のとおりです。

Waiting for client on port 7780... Just connected to /192.168.1.31:55207

はい、それらは一緒に接続できますが、サーバーは私が送信した文字列を読み取ることができません。

4

1 に答える 1

1

readUTF メソッドは、文字列データの前に、文字列の長さを 16 ビットのビッグ エンディアン数として読み取ることを想定しています。長さを送信するようにクライアントを変更するか、別の関数を使用してサーバーのデータを読み取る必要があります。

http クライアントとサーバーを作成しているように見えるので、2 番目のオプションを使用して Java サーバーにreadメソッドでリクエストを読み取らせる必要があります。

さらに、http 要求ヘッダーは iso-8859-1 でエンコードする必要があり、できれば ASCII にする必要があるため、UTF-8 エンコードを使用することはそもそも間違いです。

于 2013-08-12T06:02:07.163 に答える