Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在套接字协议的现有事件集之上定义新事件的设计查询_Java_Tcp_Udp_Netty - Fatal编程技术网

Java 在套接字协议的现有事件集之上定义新事件的设计查询

Java 在套接字协议的现有事件集之上定义新事件的设计查询,java,tcp,udp,netty,Java,Tcp,Udp,Netty,我使用JBoss Netty编写了一个java服务器和客户端程序。为了向远程客户端发送一些数据并从远程客户端接收数据,我为每个事件定义了事件和处理程序。在网络上,每个事件只是一个单字节(操作码)头,后跟消息字节。最初我只支持TCP,并在程序中定义了诸如登录、注销、数据登录、数据注销等事件。 例如 public static final int LOG_IN = 0x08; public static final int LOG_OUT = 0x0a; 然后,我决定也支持UDP,并最终拥有类似L

我使用JBoss Netty编写了一个java服务器和客户端程序。为了向远程客户端发送一些数据并从远程客户端接收数据,我为每个事件定义了事件和处理程序。在网络上,每个事件只是一个单字节(操作码)头,后跟消息字节。最初我只支持TCP,并在程序中定义了诸如登录、注销、数据登录、数据注销等事件。 例如

public static final int LOG_IN = 0x08;
public static final int LOG_OUT = 0x0a;
然后,我决定也支持UDP,并最终拥有类似LOGIN_UDP、LOGIN_TCP、DATA_OUT_TCP或DATA_OUT_UDP等事件,以便根据生成的事件,正确的事件处理程序将获取事件并将其写入适当的套接字和远程端口

正如您所看到的,我面临的第一个问题是,在添加UDP时,定义的事件和事件处理程序的数量几乎翻了一番。有没有更好的方法来处理这种情况


我面临的第二个(次要)问题是,当您从服务器向客户端写入时,像DATA_OUT这样的事件是有意义的,但是当在客户端接收到相同的事件时,“DATA_OUT”就没有意义了,因为它实际上是客户端的传入数据。目前,我有一个解码器,可以将数据输出转换为数据输入。这是最好的方法吗?

您可以使用工厂模式根据通道类型(即TCP或UDP)创建连接。在这种情况下,您必须定义一次其他详细信息


您可以使用与SERVER\u IN

相同的方式将数据调用为SERVER\u OUT,因此,我需要为UDP和TCP事件设置不同的事件号,对吗?我可以使用工厂模式来创建连接,但这并不能真正解决同一事件类型的多事件问题。谢谢你的建议。它比数据输入输出更好。不,您只有一个事件登录,而不是登录udp或登录tcp连接类型将更改。