将消息从基本服务器发送到特定客户端

时间:2012-05-27 22:17:13

标签: java android sockets serversocket

我有两个连接到我的接入点的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个客户而不再需要。

1 个答案:

答案 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