首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用线程的缓慢Android Modbus连接

使用线程的缓慢Android Modbus连接
EN

Stack Overflow用户
提问于 2022-01-06 10:52:08
回答 1查看 141关注 0票数 0

应用程序功能是与PLC连接。我正在使用可编程控制器上的Modbus服务器和安卓应用程序中的EasyModbus客户端。如果应用程序第一次连接失败,尝试再次连接大约需要2-3分钟。它在主线程上正常运行,但当我移动它以分离线程时,就会出现问题。

我试图更改连接超时,但没有结果。

代码语言:javascript
复制
public void connect() {

Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                while(!connected) {
                    ModbusClient modbusClient = new ModbusClient("192.168.0.1", 502);
                    modbusClient.setConnectionTimeout(30);

                    try {
                        Log.e(TAG, "Try connecting to port: " + 502;
                        modbusClient.Connect();
                        connected = true;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        thread.start();
}

日志:

代码语言:javascript
复制
Try connecting to port: 502
W/System: A resource failed to call close. 
W/System.err: java.net.ConnectException: failed to connect to /192.168.21.136 (port 1201) from /:: (port 46369): connect failed: ETIMEDOUT (Connection timed out)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:142)
W/System.err:     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
W/System.err:     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
W/System.err:     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
W/System.err:     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
W/System.err:     at java.net.Socket.connect(Socket.java:570)
W/System.err:     at java.net.Socket.<init>(Socket.java:450)
W/System.err:     at java.net.Socket.<init>(Socket.java:218)
W/System.err:     at de.re.easymodbus.modbusclient.ModbusClient.Connect(ModbusClient.java:88)
W/System.err:     at com.example.roseoilproduction.MainActivity$1.run(MainActivity.java:101)
W/System.err:     at java.lang.Thread.run(Thread.java:923)
W/System.err: Caused by: android.system.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
W/System.err:     at libcore.io.Linux.connect(Native Method)
W/System.err:     at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:138)
W/System.err:     at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:156)
        at libcore.io.IoBridge.connect(IoBridge.java:134)
        ... 12 more
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 11:11:25

在记住线程的工作方式之后,我添加了计时器,每隔x秒执行线程一次:

代码语言:javascript
复制
Timer timer = new Timer();
        timer.schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                connect();
            }
        }, 0, 1000);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70606002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档