Java Android telnet客户端,几秒钟后读取停止
我正在尝试在android中实现一个telnet客户端,它将持续地从telnet服务器读取数据。我已通过play store的telnet应用程序连接到服务器,验证服务器是否在连续发送数据 现在,我正在尝试创建一个应用程序来执行同样的操作,并使用apache telnetclient在屏幕上显示数据。我已成功连接到telnet服务器,并且能够在5-10秒内读取正确的线路。代码发布在下面 工作原理: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秒后停止,
- 正在连接到服务器
- 在流停止之前,读取一些行5-10秒
- 读取似乎在5-10秒后停止,并挂起readLine(),没有新数据进入。这是代码的问题吗?任何帮助都将不胜感激李>
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>