我有两个连接到我的接入点的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个客户而不再需要。
答案 0 :(得分:2)
是的,有可能。您需要与每个客户端保持单独的连接。 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