【问题标题】:Client Server LAN Messenger in JavaJava 中的客户端服务器 LAN Messenger
【发布时间】:2013-02-09 04:53:51
【问题描述】:

我正在使用客户端-服务器架构在 Java 中创建办公室内部消息传递系统。我想要实现的功能是:与特定用户或用户组的实时聊天和消息传递、文件传输和语音聊天。

我已经实现了服务器和客户端模块,客户端可以使用它们登录服务器。我为此使用了DataInputStreamDataOutputStream。当用户提交用户名和密码时,我将它们存储在由分号“;”分隔的单个字符串中然后我使用DataInputStream 将此字符串发送到服务器,并在其中将它们分开并运行数据库查询并向客户端应用程序发送适当的确认。

现在我想实现聊天和消息传递。我的问题是,我应该为此使用相同的方法吗?还是有更好的解决方案?另外,我如何将消息发送给特定的客户端(客户端 A 只想向客户端 B 发送消息)。在提出解决方案时,请记住,我还必须实现语音聊天(gstreamer)作为文件传输!!!

另外,我维护了一个数组,其中包含登录到服务器的所有客户端的名称,用于向每个客户端显示登录客户端的列表。

【问题讨论】:

    标签: java client-server chat file-transfer lan


    【解决方案1】:

    首先,通过将用户名和密码作为纯文本字符串发送,您实际上是在免费提供它们 - 任何拥有一些基本工具的人都可以嗅探用户名和密码。您将需要阅读密码学以及如何保护连接。 Java 有一个内置的密码库,这使得这很容易做到。

    如果可能的话,我会推荐使用已经开发好的聊天协议,比如 XMPP (Jabber),已经有很多免费的 Java 库实现,比如 Smack,可以为你做任何事情。除非您为不允许使用任何外部库的学校项目这样做,否则这里真的不需要重新发明轮子,这本身就是非常雄心勃勃的。 XMPP 支持文本聊天、语音聊天和文件传输。

    还有几个功能齐全的开源聊天客户端,您可以对其进行修改以满足您的特定需求。不过要记住的一件事是开源项目的许可。一些开源许可证,如流行的 GPL,要求在项目中使用开源项目的任何部分都需要您发布整个项目的源代码。这对公司来说可能是极其灾难性的,所以要小心。

    如果您仍想从头开始,那么您需要实现自己的通信协议。您必须自己设计它,同时考虑如何整合 gstreamer 和文件传输。

    再次,我建议至少查看一些已经设计好的协议,例如 XMPP,以获得一些想法。

    通常,协议有,

    • 一些数据解释了这是什么类型的请求/响应。这可以是存储为单个字节的数值,也可以是一些文本字符串,如 HTTP 中所做的那样
    • 更多关于消息的对象的数据。可以是 IP 地址、用户名、两者的组合等。如果您直接进行通信,即不通过中间人服务器,则不需要
    • 发送请求的时间
    • 数据本身
    • 某种加密。最好在用户获得授权后启动

    例如,一个非常基本的协议可能是,

    请求类型:1 个字节。 1 = 文本,2 = 语音数据,3 = 文件传输,4 = 请求当前登录的客户列表 目的地:int(IP地址) 时间:长。最好将此作为 UTC 时间发送,例如System.currentTimeMillis 返回什么 数据长度:int 数据:可变长度数据,取决于类型

    然后,对于要发送的每种类型的数据,您会以不同的方式实现数据,

    文本:DataStream 发送的字符串 语音:来自 gstreamer 的语音数据(不确定 gstreamer 是如何工作的) 文件传输: 文件名:DataStream 发送的字符串 长度:长 数据:从 FileInputStream 读取 当前登录的客户端列表: 数据:由 DataStream.writeObject 发送

    祝你好运

    【讨论】:

    • +1。 (+2?我会的)很多细节和很多事情都说了。一些注意事项:目的地可能是 ID、用户名等,尤其是在有外部通信和内部通信的情况下。密码 100% 应该/必须加密。此外,密码应始终以散列方式存储和传输。所以hash -> encrypt -> transmit -> decrypt -> authenticate。应该没有已知的方法来反转哈希 - 你最不想要的就是有人得到每个人的电子邮件密码。
    • 谢谢oroboro!这真是一个很好的解释!为此 +1!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2012-11-03
    相关资源
    最近更新 更多