【问题标题】:Android - inputStream.read() - I can not read anythingAndroid - inputStream.read() - 我什么也看不懂
【发布时间】:2013-04-28 14:45:13
【问题描述】:

我从套接字读取数据时遇到问题。我试图以不同的方式解决我的问题,我认为我的代码现在是最简单的测试它。 Android 从套接字读取并停在这一行( inStream.read() )时出现问题。 10 秒后(socket.setSoTimeout)我有一条消息--------错误:null。我想读取任何数据(0-255)或-1,但什么也没发生。在 PHP(在我的服务器上,我的代码)和 PC(不是我的应用程序)中一切都很好。我该怎么办?

这是我的第一篇文章,所以我很抱歉可能出现的错误。感谢您的帮助!

try{
    socket      = new Socket( "192.168.0.150", 502 );
    socket.setSoTimeout( 10000 );

    outStream   = new DataOutputStream( socket.getOutputStream() );
    inStream    = new DataInputStream( socket.getInputStream() );

    System.out.println("----------" + outStream);
    System.out.println("----------" + inStream );

    outStream.write( 0x01 );
    outStream.write( 0x03 );
    outStream.write( 0x10 );
    outStream.write( 0x00 );
    outStream.write( 0x00 );
    outStream.write( 0x04 );
    outStream.write( 0x40 );
    outStream.write( 0xC9 );

    outStream.flush();
    System.out.println("----------ok 1");

/////////////////////////////               

//  Thread.sleep( 50 );
    System.out.println("----------Test1: " + socket.isConnected() );
    System.out.println("----------Test2: " + socket.isInputShutdown() );

    int dat = inStream.read();
    System.out.println("----------ok2: " );
} catch( Exception e ){
    e.printStackTrace(); // <-- edit
    System.out.println( "----------Error: " + e.getMessage() );
}


------------

    <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name = "android.permission.UPDATE_DEVICE_STATS" />
    <uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name = "android.permission.WAKE_LOCK" />
    <uses-permission android:name = "android.permission.INTERNET" />

--编辑--

我的日志:http://codepaste.net/eapot2

【问题讨论】:

  • 使用 e.printStackTrace() 以获得与捕获的异常相关的有意义的输出。
  • 我添加了这一行。我的日志:codepaste.net/eapot2 如果我删除 socket.setSoTimeout(10000);然后Android崩溃(没有任何反应)

标签: java android sockets stream inputstream


【解决方案1】:

如果您遇到读取超时,显然对等方没有发送任何内容。

注意“什么都没有发生”与“Android 崩溃”不同。不要滥用标准术语。

【讨论】:

  • 好的。所以也许我应该再次描述问题。如果我在 PHP 中发送“01 03 10 00 00 04 40 C9”(作为每个数字的 chr(hexdec($value))我有响应。我在 Android 中的代码在这一行中什么都不做(等待响应)。如果我这样做没有超时我可以一直等待,但我没有响应。可能以一种糟糕的方式发送数据,但我该怎么办?使用其他设备,此代码很好,我有响应消息,但现在它是其他公司的设备,我有问题。也许我应该在程序中使用“sleep”50ms,然后再使用“read”?但是 Thread.sleep(50); 不帮助我。
【解决方案2】:

将端口更改为 1024-65565。通常不允许使用端口 502。

【讨论】:

  • 但我想通过 modbus 进行通信 - 它位于 502 端口(@98​​7654321@)。这个端口是一个标准,所以我必须从中读取。感谢您的回答,我等待另一个建议。
  • 更改端口号不会解决读取超时问题。没有答案。
  • 但是如果我改变 localhost 上的端口,这个工作(只使用读写,而不是 modbus)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多