【问题标题】:Send message from a basic server to a specific client从基本服务器向特定客户端发送消息
【发布时间】:2012-06-02 09:49:26
【问题描述】:

我有两个 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 个客户,仅此而已。

【问题讨论】:

    标签: java android sockets serversocket


    【解决方案1】:

    是的,这是可能的。您需要维护与每个客户端的单独连接。 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

    【讨论】:

    • 天哪,你简直就是个天才。我自己不能用更好的词来形容。我知道这是可能的,只是不知道如何实现它。我有我的代码,但我不知道如何把它放在这里。当我复制和粘贴它显示为垃圾。我如何像其他人一样在堆栈溢出时发布代码??
    • 在代码的每一行之前放置 4 个空格。当您编辑帖子时,帖子上方的{} 按钮会尝试自动执行此操作,但并不总是有效。您帖子的编辑框下方是预览。另外,如果我的回答解决了您的问题,请随时单击它旁边的复选标记以表明问题已解决并给我一个正确的答案奖励。
    • 甜蜜。你是男人。生病试一试。 15 分钟后返回一些代码
    • 我不确定,但有人删除了我名为 Update 2 的帖子。无论如何我已经这样做了,但我仍然能够向最后连接的客户端发送消息。好的,另一个问题,我可以在没有服务器 - 客户端通信的情况下做类似的事情。我的意思是我的手机和两个模块都连接到我的 LAN 接入点。有没有办法使用我从路由器获得的 IP 地址从我的手机向任何模块发送消息?
    • 这确实是针对不同 stackexchange 站点上的不同问题的主题,但是您的主机(连接到 LAN 的任何计算机,例如您的台式机、笔记本电脑或电话都是主机。Modules 是一个误导性的术语,您使用它的方式)需要在它们上面运行一个服务器来监听传入的消息。 openSSH 是 linux 上一个伟大而安全的工具,ssh 协议几乎可以在任何现代操作系统上使用。如果您的代码无法将消息发送到错误的客户端,请发布代码,我们将帮助您找到原因。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多