gpt4 book ai didi

java - Android Socket Client Runnable 没有停止

转载 作者:行者123 更新时间:2023-12-01 15:08:59 24 4
gpt4 key购买 nike

我正在使用以下代码将客户端连接到服务器。问题是这不会终止,并且我无法在此之后开始新的 Activity 。

我认为问题要么是我没有关闭套接字,要么是线程没有终止。

我在onCreate()中启动线程

cThread = new Thread(new ClientThread());
cThread.start();

这是我的可运行

public class ClientThread implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: Connecting...");
socket = new Socket(serverAddr, 8080);
connected = true;
while (connected) {
try {
Log.d("ClientActivity", "C: Sending command.");
PrintWriter out = new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket
.getOutputStream())), true);
// where you issue the commands

out.println(serverIpAddress);
Log.d("ClientActivity", "C: Sent.");

} catch (Exception e) {
Log.e("ClientActivity", "S: Error while sending", e);
}

connected = false;
}
//socket.close();
Log.d("ClientActivity", "C: Closed.");

} catch (Exception e) {
Log.e("ClientActivity", "C: Error while connecting", e);
connected = false;
}

}


}

最佳答案

你的程序毫无用处。假设套接字已建立,while 循环仅执行一次,因为在第一次迭代结束时,您将 connected 设置为 false,从而禁用任何进一步的循环。您不会刷新缓冲的输出以确保其被写入,并且您甚至不从套接字读取,所以我想知道您的自定义协议(protocol)是什么样的......此时,您的所有程序所做的只是将字符串写入服务器,然后退出。我们甚至无法告诉您为什么无法启动新 Activity ,因为在提供的代码中没有任何东西可以阻止您这样做。

TCP 协议(protocol)基本上有两种

  1. 基于请求-响应(如 HTTP,不适合聊天程序)。客户端建立连接,发出请求,读取响应,发出另一个请求,读取新响应等等,直到客户端完成其工作。图形客户端至少需要 2 个线程:一个用于 UI 更新,另一个用于网络通信。
  2. 客户端和服务器都会随机发送消息。这利用了套接字通信的全双工功能,但是 GUI 程序中至少需要三个线程:一个用于 UI,一个在套接字的输入流上阻塞,一个用于写入。事情会变得非常困惑,因为您可能会共享流并且必须手动同步。

如果这是另一个聊天程序,我建议不要设计自己的 TCP 协议(protocol),并从像 WebSockets 这样的标准技术开始。有Java clients可用,您可以在浏览器中简单地使用一些 Javascript 来测试您的服务器,并且服务器端还有更多选择( Socket.IO - 对于 JS 解决方案, Jetty, Glassfish ,...)。

当您获得一些经验并熟悉该工作后,您可以尝试设计自己的自定义 TCP 协议(protocol)。到那时,您至少已经了解了套接字、线程和 Android 编程的基础知识。

顺便说一句,您可能想看看 Service API用于不需要用户交互的后台任务。

关于java - Android Socket Client Runnable 没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562251/

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