gpt4 book ai didi

java - 我如何使用 TCP 将相同的数据发送到多个 android 手机?

转载 作者:可可西里 更新时间:2023-11-01 02:41:46 26 4
gpt4 key购买 nike

这是对我刚才问的一个问题的“现在更进一步”的扩展......我现在对套接字有了更好的理解,并且有一些工作代码但需要改进它......

好的,所以我目前已经让 UDP 多播工作,可以将短文本字符串从 Java“服务器”应用程序发送到多个 Android 手机(可能会成为数百个 Android 手机)。这在大多数情况下工作正常,但它确实会丢失奇数电话上的奇数字符串,并且它会随机地在短时间内完全丢失并且任何东西都无法通过,这可能有点令人沮丧.

因为据我所知,无法在 TCP 上进行广播 - 我的想法是让手机最初使用 ServerSocket“连接”到服务器应用程序。这只会收集要存储在 Set<InetAddress> 中的客户端 IP 地址。称为客户。然后我将遍历这些地址并将字符串分别发送到每部手机 - 但是我不想阻止代码,也不想永远等待发送发生,如果,比如说,手机已经进入 hibernate 状态,不能/不会接受连接。信息需要在开始发送后的几秒钟内到达所有手机(即使有 2-300 个客户端)。

我的初始代码如下,我的问题是:

  • 这段代码在一个线程中是否足够?
  • 现代 CPU 是否会充分利用多个线程,地址集在它们之间平均分配(比如 4 个线程?)
  • 在自己的线程中旋转每个连接/发送是否(我认为)是个坏主意?
  • 设置套接字超时是否允许线程更快地处理它的列表?或者这会导致问题吗?
  • 如果套接字超时设置是个好主意,那么合理的时间是多少?或者我是否需要进行测试才能正确执行此操作?

在此先感谢你们提供的任何帮助...

for (InetAddress client : clients) {
try {
Socket sendQuestionSocket = new Socket(client, portSend);
// Theory: 50 milliseconds is enough to connect, and could allow 200 clients
// to get their questions in around 10 seconds. Maybe?
sendQuestionSocket.setSoTimeout(50);
PrintWriter outStream = new PrintWriter(sendQuestionSocket.getOutputStream());
outStream.println(question.toString());
outStream.flush(); // Do I need this line?
sendQuestionSocket.close();
outStream.close();
} catch (InterruptedIOException e) {
logger.log(Level.WARNING, "Couldn't connect in time... passing this one over");
e.printStackTrace();
} catch (UnknownHostException e) {
logger.log(Level.SEVERE, "Unable to find that client");
e.printStackTrace();
} catch (IOException e) {
logger.log(Level.SEVERE, "Unable to create question sending port");
e.printStackTrace();
}

最佳答案

我会在这里使用线程:每个客户端一个线程。这对现代 cpu 来说是可以的,它不会让你阻塞执行。因此,即使有大量死客户,活客户也会尽快得到答复。

关于java - 我如何使用 TCP 将相同的数据发送到多个 android 手机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030041/

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