gpt4 book ai didi

java - 线程化 TCP 连接 - Android

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:42 26 4
gpt4 key购买 nike

我正在尝试制作一个 Android 应用程序,它将一些数据包发送到嵌入式设备。由于我的嵌入式设备不支持 UDP 数据报协议(protocol),我想使用同步 TCP 来模拟它。

也就是说,不需要来自设备的响应字符串,所以我想在从我的应用程序发送数据后立即断开 TCP 套接字。

如果有人可以概述如何创建一个线程来执行连接并在一段时间内未收到数据时关闭套接字,我将不胜感激。

我目前的代码很简单:

    try {
Socket s = new Socket("localhost",12345);

//outgoing stream redirect to socket
OutputStream out = s.getOutputStream();

PrintWriter output = new PrintWriter(out);
output.println("Hello Android!");
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));

//read line(s)
String st = input.readLine();
. . .
//Close connection
s.close();


} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

提前致谢!!!

最佳答案

首先要注意协议(protocol),如果你的应用程序卡在 String st = input.readLine(); 所以这并不意味着服务器不发送数据,因为 readLine () 方法需要一行(以 CRLF 结尾),这可能是服务器只发送了一些没有换行的字符串,然后缓冲的读取器仍然卡住线程(当前线程),因为它需要 CRLF。接下来你将有另一个类接受套接字作为参数,然后等待一段时间,然后由于服务器没有响应而关闭套接字。,像这样

class SocketMgr implements Runnable{
final private int timeout=5000;
private Socket s;
public SocketMgr(Socket s){this.s=s;new Thread(this).start();}
public void run(){
try{Thread.sleep(timeout);s.close();}catch(Exception ex){}
}
}

在你的代码中

 try {
Socket s = new Socket("localhost",12345);

//outgoing stream redirect to socket
OutputStream out = s.getOutputStream();

PrintWriter output = new PrintWriter(out);
output.println("Hello Android!");
output.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
//////////////////////////////////
new SocketMgr(s);
//////////////////////////////////
//read line(s)
String st = input.readLine();
. . .
//Close connection
s.close();


} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

你也可以检查一下这个简单的 [java threading tutorial]再次强调,了解属于您的服务器的协议(protocol)很重要。祝你好运,有一个不错的套接字程序:)。

关于java - 线程化 TCP 连接 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com