【问题标题】:Java Socket Programming LAN Messenger [closed]Java Socket 编程 LAN Messenger [关闭]
【发布时间】:2015-02-09 15:14:38
【问题描述】:

我正在使用 Lan Messenger,如何检查其他人的系统是否已插入 LAN? 意思是,那个人在线吗?

另外,我们的宿舍有局域网,我尝试运行客户端服务器程序很多次,但它在我的系统上运行良好(2 个客户端与服务器在同一台机器上)但它在服务器时不运行和客户端在不同的机器上。 代码非常好。 可能是什么原因?是否需要更改任何特殊的防火墙设置以允许数据包?

【问题讨论】:

  • 1) 局域网不在线 2) 检查他/她的IP地址是否正常
  • 有很多方法可以做到这一点。要获得正确答案,您应该更详细地描述您的架构。没有信息就不可能回答你的问题。

标签: java sockets networking lan ports


【解决方案1】:

我现在正在使用套接字创建一个聊天服务器,我这样做的方式是让每个用户大约每 20-30 秒查询一次服务器。服务器跟踪用户上次“刷新”自身的时间。如果用户离开了某个时间段或更长时间而没有这样做,那么服务器会告诉任何试图联系该用户的人他们处于离线状态。

这是一个很好的工作参考。查看服务器端的 Server 文件夹和客户端的 src 文件夹: https://code.google.com/p/simple-android-instant-messaging-application/source/browse/trunk/#trunk%2FServer%253Fstate%253Dclosed

如果您只想在 LAN 内进行通信,那么该链接中的套接字实现绝对是您想要的。如果您想在全球范围内进行通信(1 LAN 中的用户与其他 LAN 中的用户),那么您需要稍微重新设计它,以便您的服务器套接字实际上位于某些接受客户端连接的服务器上。当前的实现在每个客户端中创建一个服务器套接字,并接受来自其他客户端尝试与之通信的连接。这种设计由于 NAT 路由器而中断(原因我宁愿不解释,除非您真的想知道)。

【讨论】:

  • 我明白了。非常感谢。抱歉,我没有足够的声誉来支持您的回答。
  • 嘿,我遇到了一个问题。服务器上提供了所有连接的客户端的列表,有什么方法可以将其发送给客户端?
  • 如果每个人每 20-30 秒都在数据库中查询他们关心的用户,那么他们是否在线的信息应该在查询结果中返回给他们。客户端每 30 秒从服务器请求此信息。这有意义吗?
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 2012-07-13
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
相关资源
最近更新 更多