0

我正在开发一个简单的测试来通过套接字连接一个带有objective-c客户端的java服务器应用程序。

这是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 文档。

为方便起见,请在下次干净编译时包含更多代码。谢谢。

祝你好运,试试吧!

汤米奎

于 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 提供的相关文档。如果你知道,请告诉我/我们。

  • 我没有使用代码“[toSend text]”,因为我没有找到任何参考。

  • 其他 iOS 开发人员说“%@”是指对象。代码 [toSend text] 是一个对象吗?

最后,建立套接字连接并实现通信应该是可能的,而且不是那么难,最终我们会到达那里。所以让我们开始吧!

于 2012-05-15T22:25:22.720 回答