Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android telnet客户端,几秒钟后读取停止_Java_Android_Telnet_Apache Commons - Fatal编程技术网

Java Android telnet客户端,几秒钟后读取停止

Java Android telnet客户端,几秒钟后读取停止,java,android,telnet,apache-commons,Java,Android,Telnet,Apache Commons,我正在尝试在android中实现一个telnet客户端,它将持续地从telnet服务器读取数据。我已通过play store的telnet应用程序连接到服务器,验证服务器是否在连续发送数据 现在,我正在尝试创建一个应用程序来执行同样的操作,并使用apache telnetclient在屏幕上显示数据。我已成功连接到telnet服务器,并且能够在5-10秒内读取正确的线路。代码发布在下面 工作原理: 正在连接到服务器 在流停止之前,读取一些行5-10秒 问题是: 读取似乎在5-10秒后停止,

我正在尝试在android中实现一个telnet客户端,它将持续地从telnet服务器读取数据。我已通过play store的telnet应用程序连接到服务器,验证服务器是否在连续发送数据

现在,我正在尝试创建一个应用程序来执行同样的操作,并使用apache telnetclient在屏幕上显示数据。我已成功连接到telnet服务器,并且能够在5-10秒内读取正确的线路。代码发布在下面

工作原理:

  • 正在连接到服务器
  • 在流停止之前,读取一些行5-10秒
问题是:

  • 读取似乎在5-10秒后停止,并挂起readLine(),没有新数据进入。这是代码的问题吗?任何帮助都将不胜感激
更新:

我正在尝试在安卓4.2.2设备上运行此功能。我刚刚在一个新的安卓7设备上试用了它,代码按预期工作,我得到了连续的读数。安卓版本中是否有可能导致这种情况

--

这是TestTelnetClient.class

public class TestTelnetClient extends Activity {

private TelnetClient telnet = new TelnetClient();
private InputStream in;
private PrintStream out;
private String server = "192.168.36.105";
TextView outputView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    outputView = (TextView)findViewById(R.id.output);
}


public void sendTelnet(View view) {

    TelnetRead telnetRead = new TelnetRead();
    telnetRead.execute();
}


private class TelnetRead extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... params) {

        try {
            // Connect to the specified server
            telnet.connect(server, 8110);
            // Get input and output stream references

            in = telnet.getInputStream();
            //out = new PrintStream(telnet.getOutputStream());
            BufferedReader r = new BufferedReader(new InputStreamReader(in));
            String aad = r.readLine();
            while (true) {
                publishProgress(aad);
                aad = r.readLine();
            }
            //telnet.disconnect();
            //finish();
            //return aad;
            //return "exit";
        }
        catch (Exception e) {
            e.printStackTrace();
            return e.toString();
        }
    }

    @Override
    protected void onPostExecute(String result) {
        try {
            outputView.setText(result);
            Thread.sleep(10);
        } catch (InterruptedException e) {
            Thread.interrupted();
        }
    }

    @Override
    protected void onPreExecute() {
    }

    //@Override
    protected void onProgressUpdate(String... result) {
        outputView.setText(result[0]);
    }
}
公共类TestTelnetClient扩展活动{
私有TelnetClient telnet=新TelnetClient();
私有输入流;
私有打印流输出;
私有字符串服务器=“192.168.36.105”;
文本视图输出视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
outputView=(TextView)findViewById(R.id.output);
}
公共void sendTelnet(视图){
TelnetRead TelnetRead=新TelnetRead();
telnetRead.execute();
}
私有类TelnetRead扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
//连接到指定的服务器
telnet.connect(服务器,8110);
//获取输入和输出流引用
in=telnet.getInputStream();
//out=newprintstream(telnet.getOutputStream());
BufferedReader r=新的BufferedReader(新的InputStreamReader(in));
字符串aad=r.readLine();
while(true){
出版进展(aad);
aad=r.readLine();
}
//telnet.disconnect();
//完成();
//返回aad;
//返回“退出”;
}
捕获(例外e){
e、 printStackTrace();
返回e.toString();
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
试一试{
outputView.setText(结果);
睡眠(10);
}捕捉(中断异常e){
Thread.interrupted();
}
}
@凌驾
受保护的void onPreExecute(){
}
//@凌驾
受保护的void onProgressUpdate(字符串…结果){
outputView.setText(结果[0]);
}
}
这是android清单

<?xml version="1.0" encoding="utf-8"?>



哪里说Telnet只发送行?所谓行,我的意思是我连接的产品发送的数据格式为:“$PIXS,TIME,xxxxxx.xxxxxx*xx”,其中x是数字。现在,在前5-10秒,我从readLine()中得到了输出大约每0.1秒在while循环中运行一次,然后停止运行。我不知道Telnet协议是否以某种方式发送数据,我必须用我的代码进行解释才能获得连续读取。我无法访问服务器的源代码,但正如我所说,当从play store连接Telnet应用程序时,它会按预期工作更新:我试图在安卓4.2.2设备上运行这个程序。我刚刚在一个较新的安卓7设备上运行了它,代码按预期工作,我得到了连续的读取。安卓版本中有什么东西可能导致这种情况吗?它说Telnet只发送行吗?行的意思是t我连接的产品发送数据的格式为:“$PIXS,TIME,xxxxxx.xxxxxx*xx”,其中x是数字。现在,在前5-10秒,我从readLine()中获取此数据作为输出大约每0.1秒在while循环中运行一次,然后停止运行。我不知道Telnet协议是否以某种方式发送数据,我必须用我的代码进行解释才能获得连续读取。我无法访问服务器的源代码,但正如我所说,当从play store连接Telnet应用程序时,它会按预期工作在我从服务器获得连续读取之前。更新:我正在尝试在Android 4.2.2设备上运行此操作。我刚刚在较新的Android 7设备上进行了尝试,代码按预期工作,我获得了连续读取。Android版本中是否有可能导致此情况?
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".TestTelnetClient"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>