我有两个连接到我的接入点的 WiFi 模块 M1 和 M2。我有一部连接到同一接入点的 Android 手机。我的 Android 手机上有一个套接字服务器,两个模块作为客户端连接到服务器。现在我的问题是,是否可以从我的手机向模块 M1 发送字符串消息,而无需向 M2 发送任何内容。我想在向其发送消息的客户端之间进行选择。在 Java 中是否可能?
好的,开始了。
//setting up server
ServerSocket serverSocket = new ServerSocket(8000, 0, IPaddress);
//creating a client socket to accept it
Socket clientSocket = serverSocket.accept();
现在,我在单独的线程中接受客户端,这样主线程就不会因为 accept()
函数阻塞而卡住。
我不知道如何在每次新客户端连接时创建一个新线程。我也不知道如何限制可以连接的客户端数量。我最多需要 5 个客户,不能再多了。
最佳答案
是的,这是可能的。您需要与每个客户端保持单独的连接。 ServerSocket
类有一个 accept()
函数,该函数返回一个 Socket
对象。该对象代表两点(您的服务器和一个客户端)之间的连接。您可以在循环中多次调用 ServerSocket.accept() 来接受所有传入连接。返回的每个 Socket 对象将针对不同的客户端。
为了让服务器向特定客户端发送消息,它需要知道哪个套接字属于哪个客户端,因此客户端必须向服务器发送一些标识自己的消息,而服务器需要阅读并解释该消息。然后它可以为该特定客户端提供适当的响应。
如果您仍然遇到问题,请发布您的代码。
更新,因为您向问题添加了代码:请参阅 Android Documentation关于创建线程。除了 stackoverflow 上的这篇文章之外,还需要大量阅读。
至于接受连接和启动线程,只需循环执行即可:
for(int i = 0; i<5; i++){
clientSocket = serverSocket.accept();
// start a new thread, passing it the clientSocket as an argument
}
其他可能有用的链接: https://developer.android.com/resources/articles/painless-threading.html https://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
关于java - 从基本服务器向特定客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10841088/