我正在编写一个小型UDP服务器,它可能会收到不同的UDP协议消息,如STUN,RTP,RTCP,DTLS数据包到同一个端口。
我应该首先能够区分每种协议消息,以便执行不同的逻辑。
我在哪里可以找到java的示例,更好的是一个库来帮助我。
答案 0 :(得分:1)
首先,我应该能够区分各种协议消息,以便执行不同的逻辑。
为什么呢?我只是简单地运行逻辑;即,将此端口上的每个数据包传递给每个逻辑。
逻辑应该被设计为忽略不良形式的请求(毕竟,如果它们将在开放的互联网上运行,它们应该足够强大以处理甚至恶意制作的数据包)。
如果有些传入请求是-polyglots-;即,它们在多个协议中有效,然后客户端将接收多个响应。在此设计中,由客户端代码处理不合法的响应。也许客户端足够强大,可以忽略它们。或者也许客户端会从一开始就重试协议,可能会选择一个新的序列号或者不再是多语言的东西(纯粹的运气)。
我不认为那里有一个非常好的"这个问题的解决方案,因为UDP数据包太小而不能浪费空间,每个协议都有唯一的标识符。 UDP协议旨在为不同的服务使用单独的端口。唯一正确的"解决方案是将运行在同一端口上的服务放在不同的IP地址上。
答案 1 :(得分:1)
这是一个c ++版本,我相信它可以在java中重写,但它会让你知道该怎么做。 Btw缓冲区变量保存最近收到的udp数据报。
if((buffer[0]==0) || (buffer[0]==1))
return stun; // STUN packet
if((buffer[0]>=128) && (buffer[0]<=191))
return rtp; // RTP packet
if((buffer[0]>=20) && (buffer[0]<=64))
return dtls; // DTLS packet