在Android中如何停止正在等待新套接字的线程

2024-06-22

我正在开发一个使用 Socket 连接到服务器的软件;

connectionThread = new Thread(new Runnable( ) {
    public void run() {
        InetAddress serverAddress = InetAddress.getByName(ip);
        serverSocket = new Socket(serverAddress, port);
        //do more stuff
        }
    });
connectionThread.start();

当客户端没有连接到服务器时,线程将继续等待新套接字的返回,直到达到超时。

我想让用户取消该操作。然后我试着打电话connectionThread.interrupt()当用户单击后退按钮时。但线程仍在运行。

我可以让线程运行直到新的 Socket 超时,但我认为这不是很好。


不要使用new Socket(serverAddress, port);。相反,首先使用创建一个新套接字new Socket(),然后使用连接套接字Socket.connect()。这样,您就可以

1)指定连接超时(SocketTimeoutException将被提高),并且

2)使用以下命令从不同线程取消进程Socket.close() (SocketException将会提高)。

这是使用此方法的代码片段:

connectionThread = new Thread(new Runnable( ) {
    public void run() {
        try {
            InetAddress serverAddress = InetAddress.getByName(ip);
            serverSocket = new Socket();
            serverSocket.connect(new InetSocketAddress(serverAddress,port),TIMEOUTMS);
            //do more stuff
        } catch (SocketTimeoutException ste)
        {
            // connect() timeout occurred
        } catch (SocketException se)
        {
            // socket exception during connect (e.g. socket.close() called)
        }
    }});
connectionThread.start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Android中如何停止正在等待新套接字的线程 的相关文章

  • 从 SynchronizationContext 派生

    简而言之 我实现了一个从 SynchronizationContext 派生的类 以便 GUI 应用程序可以轻松地使用 GUI 线程以外的线程上引发的事件 我非常感谢对我的实施提出评论 具体来说 有什么是您建议反对的或可能会导致我未预见到的
  • 无法绑定到调试器的本地 XXXX

    我不断得到Can t bind to local XXXX for debugger控制台中的消息 但不适用于 1 个端口 适用于所有随机端口 我已经完成了中所述的操作这个问题 https stackoverflow com questio
  • Android - 缩放和压缩位图

    我正在开发一个 Android 应用程序 它具有相机捕捉和照片上传功能 如果设备具有高分辨率相机 则捕获的图像尺寸将非常大 1 3MB或更大 由于应用程序需要将此图像上传到服务器 因此我需要在上传之前压缩图像 例如 如果相机拍摄了 1920
  • 透明模糊视图模糊了下面的布局

    我有一个已设为透明的 Linearlayout 现在我正在寻找一种方法来赋予它模糊效果 因此它下面的内容会变得模糊 就像 Windows 7 Aero 外观一样 参见屏幕截图 我知道你可以做这样的模糊效果 getWindow addFlag
  • Worker verticles 不并行处理请求

    我正在尝试扩展一个应用程序 该应用程序对外部应用程序进行阻塞调用以获取一些数据 请求和响应顺序并不重要 因为 它是一个阻塞调用 如 vertx 文档中所述 我正在使用工作器 verticle 工作器池设置为 5 并且我已经部署了 5 个工作
  • CameraX:将照片捕获为位图

    我正在尝试使用护目镜CameraX示例应用程序 CameraXBasic 可以在 Github 上找到 并且希望将图像捕获为位图 以便能够在保存图像之前对图像进行一些修改 有人对如何实现这一目标有建议吗 请参阅下面的Google原始代码来捕
  • .NET 服务是否表现出线程敏捷性?

    与以下问题相关this https stackoverflow com questions 657735 how is asp net multithreaded and this https stackoverflow com quest
  • 从套接字读取数据,发送响应并关闭

    我正在开发一个 c 和 php 项目 其中 PHP 脚本打开一个到 c 程序的套接字 c 程序将读取数据 然后发回响应 在 PHP 脚本中我有以下内容 echo Opening Client fp fsockopen 127 0 0 1 1
  • 无法按宽度包装任意行数的类似块引用的 TextView

    I need to render a quote block of arbitrary length The text must be aligned to the left while the block itself aligned t
  • 将 Dagger 与 Espresso 一起使用

    我计划在我的应用程序多模块上创建 Espresso 测试 并且我即将创建第一个 Espresso 测试 但我看到的是 在我的应用程序上我没有AppComponent我可以在哪里伪造它 由于我想在我的功能模块上添加测试 我将创建TestApp
  • 无法启动由 ContextImpl.openFileOutput 处的 NullPointerException 引起的活动

    我发布了一个使用 Google 地图 Android 兼容性库的应用程序 https github com petedoyle android support v4 googlemaps https github com petedoyle
  • Gradle 警告:不推荐使用variant.getOutputFile() 和variant.setOutputFile()

    我在 Android 应用程序项目中使用以下简化配置 android compileSdkVersion 20 buildToolsVersion 20 0 0 defaultConfig minSdkVersion 8 targetSdk
  • 菜单项标题未显示

    菜单项的标题未显示在片段内 我在菜单文件中有两个项目 第一个是带有图标和标签的showAsAction always在工具栏中显示图标 第二个只有标题 我不知道这里出了什么问题 菜单项的所有操作均有效 例如下面 菜单 销售 xml menu
  • 让 DrawerLayout 在 ActionBar 上滑动

    我在活动中有一个滑动抽屉菜单 其中有一个带有一些选项卡的操作栏 我想让滑动抽屉滑过标签 而不是滑过标签下方 这就是现在的样子 关于如何做到这一点有什么想法吗 注意 我知道我可能会在这里打破一些约定和 UI 模式 如果它根本不起作用 我会考虑
  • Android Studio - 程序类型已存在:com.google.android.gms.internal.measurement.zzwp

    昨天 我的应用程序运行良好 今天 不知道为什么 重新打开Android Studio后 应用程序就无法编译了 显示的错误是 Program type already present com google android gms intern
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst
  • ACRA formkey 哪里可以得到?

    所以我尝试按照以下说明进行操作https github com ACRA acra wiki BasicSetup https github com ACRA acra wiki BasicSetup但它太旧了或者什么的 使用我自己的 gm
  • Android 位图内存问题 - 错误:8294416 字节分配内存不足

    我目前正在开发一个讲述故事的应用程序 该故事包含 场景 其中包含通过 ImageView 显示的多个 JPEG 和 PNG 文件 我创建 ImageView 并通过以下函数将其添加到布局中 private ImageView newImag
  • 错误:未找到 Flutter SDK。在 local.properties 文件中使用 flutter.sdk 定义位置

    ERROR Flutter SDK not found Define location with flutter sdk in the local properties file 我已经导入了 Flutter 示例应用程序mahtab al
  • 如何从 Activity 的包含类启动 Intent

    我正在寻找从不是 Activity 而是 Activity 类的包含对象的类启动意图的最佳方法 例如活动类 Class MainActivity extends ListActivty TestLauncher tester 以及我想从中开

随机推荐

  • C++中不规则文件写入性能

    我正在编写一个应用程序 它通过简单的函数调用接收二进制数据流 例如put DataBLock dateTime 其中每个数据包为 4 MB 我必须将这些数据块写入单独的文件 以供将来与一些附加数据 如 id 插入时间 标签等 一起使用 所以
  • 开关可能会掉落(不,可能不会)

    在 GCC 7 上 我已启用 Qt Creator 4 9 上的大部分警告 现在我有一个涵盖所有枚举值的 switch 语句 如果我添加一个default 我收到警告 来自 Qt 创建者 warning default label in s
  • 使用after_save回调修改同一个对象而不再次触发回调(递归)

    如果我向 ActiveRecord 模型添加 after save 回调 并在该回调上使用 update attribute 更改对象 则会再次调用该回调 因此会发生 堆栈溢出 呵呵 无法抗拒 是否可以避免这种行为 也许在执行期间禁用回调
  • 带有多个参数的@selector

    如何调用具有多个参数的 selector 方法 我有以下内容 self performSelector selector changeImage withString withObject A1 withObject fileString2
  • 如何转义单引号字符串中的单引号

    比方说 你有一个 Bashalias like alias rxvt urxvt 效果很好 However alias rxvt urxvt fg 111111 bg 111111 不会起作用 也不会 alias rxvt urxvt fg
  • 使用 qt 创建和使用共享库

    我对共享库很陌生 所以我对如何创建 使用共享库有疑问 我正在使用 Qt Creator 和 qt 5 4 2 以及 Microsoft Visual C 11 0 编译器 在我的项目中 我需要创建一个 dll 它从外部库调用函数 有 h l
  • 为什么 Text.splitText() 会影响布局?

    假设我们的页面中有一个段落 其中有一个文本块 p laborum beatae est nihil non hic ab deserunt repellat quas Est molestiae ipsum minus nesciunt t
  • 使用标准 php 库使多个 memcache 键失效的最佳方法?

    我有一个数据库 其中的文件可以搜索 浏览 并且在多个服务器上有多个副本 我缓存搜索 浏览页面和服务器位置 url 假设我删除了一个文件 有什么好方法可以使该文件的所有搜索 浏览数据和 URL 失效 或者 如果文件服务器出现故障 我需要使指向
  • 使用 Savon 添加产品以连接到 Magento API

    我已经有了用于在 Ruby 中列出产品的代码 但正在努力添加产品 这是我的代码 我正在使用 savon gem 进行 HTTP SOAP 请求 基于此处的代码http www polyvision org 2011 10 02 using
  • libcurl 中不支持或禁用协议 https

    我在我的应用程序中使用 Authorize net 在 OSCOMMERCE 中 当用户付款时返回空响应 我调试了一下 发现返回了这个错误 libcurl 中不支持或禁用协议 https 我正在发送一个以 https 开头的探测器 url
  • 键盘将显示两次

    我遇到了问题 keyboardWillShow 触发两次 但 keyboardWillHide 调用一次 Here is 一个例子 https github com x hovo x KeyboardWillShow git一旦 keybo
  • 当我使用日期时间索引时添加到数据框

    我试图获取它 以便当我循环遍历一系列事物时 我可以将特定日期从每个仓库收到的数量添加到数据框中 当我尝试以下操作时 它不起作用 if inv prod not in self inventory columns add row in sel
  • Golang HTTP Post 错误:连接被拒绝

    我正在尝试向正在运行 PHP 应用程序的端口 8080 上的本地主机发送 post 请求 卷曲效果很好 curl data key asdf http localhost 8080 但在 Go 中我收到以下错误 Post http loca
  • 如何在 xslt 输出的末尾添加换行符? [复制]

    这个问题在这里已经有答案了 可能的重复 在 XSLT 中生成新行 https stackoverflow com questions 723226 producing a new line in xslt 如果有以下 xslt 文件
  • 在 VSCode 中调试 python 模块的问题

    我的 python 实践项目有以下目录结构 data ds and algo exercises init py armstrong number py extract digits py output The extract digits
  • Pycharm 3.4.1 - “AppRegistryNotReady:模型尚未加载”。 Django Rest 框架

    我在用着DRF and Pycharm 3 4 1 and Django 1 7 当我尝试通过 Pycharm django 控制台测试我的序列化器类时 出现以下错误 Code from items app serializers impo
  • JPA:实现模型层次结构 - @MappedSuperclass 与 @Inheritance

    我正在使用 Play Framework 1 2 4PostgreSQL and JPA 我想要一个模型层次结构 并看到有一些替代方法可以做到这一点 我有一个基类 它是抽象的 和两个扩展该基类的具体类 当我想要有具体的类时 我不想保留这个基
  • 在android上react-native上传图片

    我在 Android 上有一个反应本机应用程序和一个用 NodeJS Express 编写的后端服务器 我使用 multer 来处理文件上传 const multer require multer const mime require mi
  • Entity Framework 4.0 自动生成的类未标记为可序列化

    我在 Entity Framework 4 0 V2 自动生成的类 tt 中看到的一件奇怪的事情是这些类没有标记为可序列化 尽管它们具有 WCF 的 DataContract 属性 现在的问题是 当我将 POCO 对象存储到视图状态中时 它
  • 在Android中如何停止正在等待新套接字的线程

    我正在开发一个使用 Socket 连接到服务器的软件 connectionThread new Thread new Runnable public void run InetAddress serverAddress InetAddres