Java Socket 编程 LAN Messenger

标签 java sockets networking lan ports

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

此外,我们的宿舍有 LAN,我已经多次尝试运行客户端服务器程序,但它在我的系统上运行良好(2 个客户端与服务器在同一台计算机上),但在服务器时它无法运行和客户端位于不同的机器上。 代码完全没问题。 可能是什么原因?是否需要更改任何特殊的防火墙设置以允许数据包?

最佳答案

我现在正在使用套接字创建一个聊天服务器,我这样做的方式是让每个用户大约每 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 路由器而中断(出于原因,除非您真的想知道,否则我不想解释)。

关于Java Socket 编程 LAN Messenger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412982/

相关文章:

java - 编译 Play 2.x - Java 应用程序超时(15 分钟)| Heroku 和 Play 框架

c - 检测传入套接字连接

c - 使用数据包 MMAP 过滤数据包?

http - 为什么我尝试使用 "net/http: request canceled while waiting for connection"获取一些图像时得到 "net/http"

java - 获取套接字读取操作超时异常

java - 带有 JSP 示例的简单 AJAX

java - 正则表达式从 errorString 捕获多个单词

Java 泛型数组 : Why does this compile and what does this mean?

c - 为什么从 sockaddr_in 到 sockaddr 的转换有效

c - Winsock:如何在不关闭连接的情况下停止发送/接收