Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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_Sockets - Fatal编程技术网

Java 套接字编程。真的有那么复杂吗?

Java 套接字编程。真的有那么复杂吗?,java,sockets,Java,Sockets,我开发了一个基于web的JavaEE应用程序。最近,我有一项工作来增加额外的功能——能够向使用.NET平台编程的TCP服务器发送和接收消息。我和另一个人扩展了我们的系统,这样他们可以互相通信和交换字节 然而,这里有一个大问题: 要使它工作几个小时以上而不出现套接字I/O错误,几乎是不可能的。有时TCP服务器需要重新启动,有时我的web服务器需要重新启动,这应该不是问题,因为当两台服务器都在运行时,它们会以5秒的间隔ping自己,如果出现问题,则会再次创建套接字 但正如我所提到的,如果没有得到一些

我开发了一个基于web的JavaEE应用程序。最近,我有一项工作来增加额外的功能——能够向使用.NET平台编程的TCP服务器发送和接收消息。我和另一个人扩展了我们的系统,这样他们可以互相通信和交换字节

然而,这里有一个大问题:

要使它工作几个小时以上而不出现套接字I/O错误,几乎是不可能的。有时TCP服务器需要重新启动,有时我的web服务器需要重新启动,这应该不是问题,因为当两台服务器都在运行时,它们会以5秒的间隔ping自己,如果出现问题,则会再次创建套接字

但正如我所提到的,如果没有得到一些回复,交换信息的时间几乎不可能超过几个小时

不幸的是,我不知道TCP服务器是如何工作的,这对我来说更难找到问题的根源

使用套接字真的那么复杂吗

事实上,我不得不把它当作一个真正的问题。这就是:

你们能给我指一些教程(不是sun网站上那个么简单的教程)或者告诉我一些关于套接字编程的更具体的内容吗?

Java的基本客户机-服务器编程

借助本教程中指定的注释,您几乎可以避免所有可能的初学者错误。

Java基本客户机-服务器编程


借助本教程中指定的注释,您几乎可以避免所有可能的初学者错误。

互联网如果不稳定,保持TCP连接永久性几乎是不可能的。 例如,一些防火墙会在一段时间没有信息通过后将其断开。 您无权访问的TCP服务器可能也会这样做

我的建议是,每次通过连接发送数据之前,检查它是否仍然处于活动状态,如果没有,请重新连接


如果您还需要从服务器接收数据,因此需要连接始终处于活动状态,则最好定期检查连接是否处于活动状态,如果不是,则重新建立连接。

如果internet不稳定,则通过它保持TCP连接的永久性几乎是不可能的。 例如,一些防火墙会在一段时间没有信息通过后将其断开。 您无权访问的TCP服务器可能也会这样做

我的建议是,每次通过连接发送数据之前,检查它是否仍然处于活动状态,如果没有,请重新连接


如果您还需要从服务器接收数据,因此需要连接始终处于活动状态,那么最好定期检查连接是否处于活动状态,如果未处于活动状态,则重新建立连接。

通过网络进行通信时,您应该预计会出现一些停机时间,并将客户端和服务器写入容错状态

服务器应该检测客户端何时断开(例如意外的套接字关闭等),并且应该能够接受来自它的新连接。您可以创建某种会话逻辑,以便在客户端需要重新连接时可以保留状态

客户端应该能够检测到它与服务器的连接何时中断,并且应该能够重新连接并继续其工作。自动化这种行为应该不难


如果您有任何类型的UI,那么您应该在脱机运行时向用户显示它正在尝试重新连接。

当通过网络进行通信时,您应该预计会出现一些停机时间,并将客户端和服务器写入容错状态

服务器应该检测客户端何时断开(例如意外的套接字关闭等),并且应该能够接受来自它的新连接。您可以创建某种会话逻辑,以便在客户端需要重新连接时可以保留状态

客户端应该能够检测到它与服务器的连接何时中断,并且应该能够重新连接并继续其工作。自动化这种行为应该不难


如果您有任何类型的UI,则应在脱机运行时向用户显示它正在尝试重新连接。

您是否绝对确定没有网络问题?请阅读本文档。看看这些例子。“某些套接字I/O错误”。你能公布具体的错误吗?它将提供更多信息。即使存在网络问题,也应在网络问题消除后重新开始工作。现在我们必须一次又一次地重新启动服务器……当出现网络问题时(通常这会转化为ping超时),套接字将断开连接,您必须手动重新连接。重新连接通常不是一件小事,对象需要重新初始化等等。如果在重新启动程序时它可以工作,那么有一种方法可以让它工作,而无需重新启动它。在某些地方,您一定有与Java和.NET交互方式无关的错误代码。您是否绝对确定没有网络问题?请阅读此文档。看看这些例子。“某些套接字I/O错误”。你能公布具体的错误吗?它将提供更多信息。即使存在网络问题,也应在网络问题消除后重新开始工作。现在我们必须一次又一次地重新启动服务器……当出现网络问题时(通常这会转化为ping超时),套接字将断开连接,您必须手动重新连接。重新连接通常不是一件小事,对象需要重新初始化等等。如果在重新启动程序时它可以工作,那么有一种方法可以让它工作,而无需重新启动它。在某些地方,您一定有错误的代码,这些代码与Java和.NET的交互方式无关