在我工作的地方,我们需要一个能够:
的协议它将在java中实现。所以我有一些问题,因为我还没有实现过网络协议。
我在Java和C ++方面有很好的背景,但还没有使用套接字/网络编程。
由于
答案 0 :(得分:3)
看一下Google Protocol Buffers,它将生成一个紧凑的有线协议以及自动生成Java消息类。我希望在使用Java NIO ByteBuffer
s滚动我自己的消息编解码器之前听说过它。
答案 1 :(得分:2)
我有一种感觉,你正试图重新发明SIP(如果你的数据包处理主要是无状态的,而且XML足够小,可以进入< 3k数据包),或者XMPP。
如果您需要面向连接的登录/注销以及有状态命令/指令,那么XMPP可能更接近要求。此外,Jingle extension到XMPP已经处理了RTP设置和拆解。 XML消息很容易嵌入到自定义XMPP数据包(它们本身就是XML)中,并且已知有用于代理文件传输的XMPP解决方案。
我很确定它能很好地满足您的要求(至少它们在这里呈现的方式)。如果您不必设计一个全新的协议,那么如果您不这样做,可能会更容易。同时重用现有的XMPP服务器可以解决创建自己的消息代理的难题。有OpenFire服务器,用Java编写。
答案 2 :(得分:1)
我不知道这是不是坏建议,但我通常为我的网络应用程序做的是创建一个包含TAG字符串和CONTENT字符串的Message对象。 CONTENT部分通常是一个JSON字符串,消息本身也作为json字符串发送到服务器或从服务器发送。
当服务器或客户端收到消息时,它会将json解析为Message对象。然后,您可以检查邮件的TAG部分,以查看邮件的CONTENT部分中包含的内容类型,并决定如何处理该邮件。
例如,如果TAG ==“LOGIN”,则CONTENT可能是登录详细信息或类似内容。当TAG ==“MESSAGE”时,CONTENT可能是一个代表您参数的json字符串,例如,谁是收件人,以及邮件的内容等等。
然后,您可以对字符串进行加密和解密。如果这是一种愚蠢的方式,请在评论中告诉我,以便我可以学习:)
我通常也会在两侧实现状态设计模式,但至少在服务器端实现。例如,服务器以WaitingForLogin状态启动。当客户端登录时,切换到仅侦听文件和聊天消息的其他状态作为示例。通过这种方式,我发现管理起来更容易一些。
答案 3 :(得分:0)
您可以使用http或https。 java媒体框架包含rtp。
的实现答案 4 :(得分:0)
从头开始编写协议可能需要大量工作。看看XMPP。
如果你想编写自己的协议,首先要学习像JSON或类似的RPC形式,这将使你的生活更轻松。