3

我有两个 wifi 模块 M1 和 M2 连接到我的接入点。我有一部连接到同一个接入点的安卓手机。我的 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 个客户,仅此而已。

4

1 回答 1

2

是的,有可能。您需要维护与每个客户端的单独连接。该类ServerSocket有一个accept()返回Socket对象的函数。该对象表示两点之间的连接,即您的服务器和一个客户端。您可以ServerSocket.accept()在一个循环中多次调用以接受所有传入连接。返回的每个Socket对象都将用于不同的客户端。

为了让服务器向特定的客户端发送消息,它需要知道哪个套接字属于哪个客户端,因此客户端必须向服务器发送一些标识自己的消息,服务器需要读取和解释那条消息。然后它可以针对该特定客户端以适当的响应进行响应。

如果您仍然遇到问题,请发布您的代码。

更新,因为您在问题中添加了代码:请参阅有关创建线程的Android 文档。除了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

于 2012-05-27T22:37:09.463 回答