这可能更多是讨论而不是问题。
背景: 我有两对服务器/客户端,一对用Java编写,另一对用C#编写。这两对都在做同样的事情。当我使用Java\Java和C#\C#组合时没有问题。我也想让Java\C#和C#\Java的组合也能正常工作。I\O没有问题,我使用字节数组表示XML格式化字符串。我必须使用TCP。
我需要注意优雅地断开连接,在Java中没有这样的东西。当你关闭客户端套接字时,服务器端套接字仍处于被动关闭状态——因此处理此套接字的服务器线程仍然活着,如果有很多客户端,我可能会遇到数千个不必要的线程。在C#中,只需调用TcpClient.Available即可确定缓冲区中是否有数据或客户端是否已关闭(SocketException)。在Java中,我可以考虑两种方法:
1.您必须向套接字的底层流写入一些内容,以真正测试另一侧是否仍然打开。 2.在关闭它之前,您必须让另一方知道您正在关闭连接的一侧。我已经实现了这个,关闭客户端套接字之前,我发送一个包含0x04字节(传输结束)的数据包到服务器,服务器通过关闭套接字的服务器端来响应该字节。
不幸的是,当涉及到C#\Java和Java\C#客户端\服务器对时,这两种方法都让我陷入了两难境地。如果我希望这些对能够相互通信,我将不得不添加代码以向C#客户端发送0x04字节,并且当然还要处理C#服务器中的代码,这有点过于繁琐。但我可以忍受不必要的网络流量,主要问题是这个C#代码是核心通信库的一部分,除非绝对必要,否则我不想去碰它。
问题: 在Java中是否有其他方法来优雅地断开连接,而不需要写入套接字的底层流并检查结果,因此我不必在C#代码中处理它?在使用的库方面,我有自由,我不必仅使用Java SE\EE。
背景: 我有两对服务器/客户端,一对用Java编写,另一对用C#编写。这两对都在做同样的事情。当我使用Java\Java和C#\C#组合时没有问题。我也想让Java\C#和C#\Java的组合也能正常工作。I\O没有问题,我使用字节数组表示XML格式化字符串。我必须使用TCP。
我需要注意优雅地断开连接,在Java中没有这样的东西。当你关闭客户端套接字时,服务器端套接字仍处于被动关闭状态——因此处理此套接字的服务器线程仍然活着,如果有很多客户端,我可能会遇到数千个不必要的线程。在C#中,只需调用TcpClient.Available即可确定缓冲区中是否有数据或客户端是否已关闭(SocketException)。在Java中,我可以考虑两种方法:
1.您必须向套接字的底层流写入一些内容,以真正测试另一侧是否仍然打开。 2.在关闭它之前,您必须让另一方知道您正在关闭连接的一侧。我已经实现了这个,关闭客户端套接字之前,我发送一个包含0x04字节(传输结束)的数据包到服务器,服务器通过关闭套接字的服务器端来响应该字节。
不幸的是,当涉及到C#\Java和Java\C#客户端\服务器对时,这两种方法都让我陷入了两难境地。如果我希望这些对能够相互通信,我将不得不添加代码以向C#客户端发送0x04字节,并且当然还要处理C#服务器中的代码,这有点过于繁琐。但我可以忍受不必要的网络流量,主要问题是这个C#代码是核心通信库的一部分,除非绝对必要,否则我不想去碰它。
问题: 在Java中是否有其他方法来优雅地断开连接,而不需要写入套接字的底层流并检查结果,因此我不必在C#代码中处理它?在使用的库方面,我有自由,我不必仅使用Java SE\EE。