0

私はソケット経由でJavaサーバーアプリケーションをObjective-Cクライアント側に接続するための簡単なテストを開発しています。

これはJava側です:

BufferedReader dis = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String message = dis.readLine();
System.out.println("Message Received: " + message);
dis.close();
socket.close();

これはobjective-c側です:

- (IBAction)click:(id)sender{
    @try {   
        [socket sendString:[NSString stringWithFormat:@"%@",[toSend text]]];
    }
    @catch (NSException * e) {
        NSLog(@"Unable to send data");
    }
    [toSend resignFirstResponder];
}

多くの問題があります:

このようにして、サーバーの出力は次のようになります。

Message Received: null

私はこれを読んで、その終了文字readLine()列を持つ文字列を受け取る必要がある"\n"ので、追加時に行を編集します\n:

[socket sendString:[NSString stringWithFormat:@"%@\n",[toSend text]]];

しかし、私はこの行でエラーを取得します: スクリーンショットのように EXC_BAD_ACCESS

EXC_BAD_ACCESS

何が問題なのですか?誰かが私を助けることができますか?

4

2 に答える 2

1

Java 側でプロトタイプを作成しましたが、Objective-C/iOS または Apple 製品を持っていません。問題は iOS または Java 側にあると思われます。ですから、iOS からテキストを正しく送信していることを願っています。

提案されたコード:

BufferedReader dis = new BufferedReader(new InputStreamReader(socket.getInputStream(), Charset.defaultCharset()));

クラス InputStreamReader には、定義済みの文字セットが必要です。文字セットはオプションではなく、必須であるはずです! Sun のドキュメントによると。

便宜上、pls は次回クリーン コンパイル用のコードをさらに含めます。ありがとう。

がんばってね!

トミー・クウィー

于 2012-05-15T01:11:52.677 に答える
0

変更された投稿/質問によると、Objective-C側から例外が発生しました。したがって、問題はJava側ではない可能性があります。デバッグの目的で、Cコードをより単純にすることを提案しています...

BOOL success;
success = [socket SendString: @"Hello World!"];
if (success != YES) {
  NSLog(@"Fail to send")
}

ノート:

  • 私はObjective-Cに精通しておらず、Appleからのドキュメントを見つけることができませんでした。ご存知の方は教えてください。

  • コード「[toSendtext]」は参照が見つからなかったため、使用しませんでした。

  • 他のiOS開発者は、「%@」はオブジェクトを意味すると言っています。コード[toSendtext]はオブジェクトですか?

最後に、ソケット接続を確立して通信を実現することは可能であり、それほど難しくはないはずです。最終的にはそこに到達します。やってみよう!

于 2012-05-15T22:25:22.720 に答える