【问题标题】:android Handle multiple clients connected to a server using socketsandroid 处理使用套接字连接到服务器的多个客户端
【发布时间】:2023-04-10 04:28:01
【问题描述】:

我有一个需要让多个套接字通信的 Android 应用。这是基本的解决方法:

我的应用程序(Say Server)是一个将作为服务器套接字运行的服务。其他应用程序可以在预定义的端口上连接到它。可以有多个连接,比如客户端 1、客户端 2。

所以当客户端 1 发送 hello 时,服务器会处理这个并且应该将回复发送回客户端 1。

目前我能够为客户端 1 和客户端 2 连接服务器。我已经创建了相同的输入、输出缓冲区。但我不确定服务器将如何检测它从哪个接收到“hello”。

我指的是这个例子,但仍然不清楚如何使用该解决方案:

How can I handle multiple clients connected to a server using sockets?

【问题讨论】:

    标签: android sockets serversocket


    【解决方案1】:

    在服务器端创建连接的 ServerSocket.accept() 调用返回一个套接字。每次调用 accept 都会创建一个新的 Socket 用于与该特定客户端进行通信。因此,无论 Socket 向您发送什么输入,都是需要响应的 Socket。

    【讨论】:

    • 没错,但是如何检测应该使用哪个输出来响应。
    • 如果你指的是哪个OutputStream,就是与socket关联的OutputStream。如果你的意思是别的,你需要更清楚。
    • 我创建了可以使用套接字进行通信的安卓应用程序。我可以使用 telnet 通过命令提示符(用于测试)连接到相同的设备。当一对一通信进行时,它工作正常。但是如果我打开另一个命令提示符,我就可以连接和交流。但是当我尝试从第一次发送请求时,第二次收到响应。实际上,它应该响应第一个提示的发件人。我创建线程的方式与在第一篇文章中提到的链接中解释的方式相同。但不确定如何检测用于发送响应的输出流。
    【解决方案2】:

    首先我尝试在建立新连接时检查线程 ID,但它与服务器 ID 相同。 每当从特定线程收到请求时,它都有一个 ID。你会得到它

    Thread.currentThread().getId();

    这对每个客户都是独一无二的。所以我保存了这个并用它来检测我应该回复哪个线程。

    感谢大家的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 2013-12-05
      • 2014-05-21
      • 1970-01-01
      • 2017-02-25
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多