2012-05-27 43 views
3

我有两个连接到我的接入点的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(); 

现在,我接受一个单独的线程中的客户端,以便在主线程不会冻结becauz accept()功能阻止。

我不知道如何在每次新客户端连接时创建新线程。另外我不知道如何限制可连接的客户端数量。我最多需要5个客户,不再需要。

回答

2

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

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

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

UPDATE因为您在问题中添加了代码:请参阅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

+0

噢老兄,你简直就是一个天才。我无法用自己的话说得更好。我知道有可能只是不知道如何实现它。我有我的代码,但我不知道如何把它放在这里。当我复制并粘贴它显示为垃圾。我如何发布代码像其他人一样堆栈溢出? –

+0

在代码的每行之前放4个空格。当您编辑文章时,您帖子上方的“{}”按钮会尝试自动执行此操作,但它并不总是奏效。在你的文章的编辑框下面是预览。另外,如果我的答案解决了您的问题,请随时点击旁边的复选标记以表明问题已解决,并为我提供正确答案奖励。 – kaz

+0

甜美。你是男人。生病给了一枪。在15分钟后返回一些代码 –

相关问题