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



我开发了一个基于web的Java EE应用程序。最近我做了一项工作,添加额外的功能——能够向使用。net平台编程的TCP服务器发送和接收消息。我和另一个家伙扩展了我们的系统,这样它们就可以相互通信和交换字节。

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

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

但正如我提到的,交换消息超过几个小时而不出现错误几乎是不可能的。

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

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

实际上我必须作为一个真正的问题。这里是:

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

Basic Client-Server Programming in Java.

http://edn.embarcadero.com/article/31995

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

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

我的建议是,每次通过连接发送数据之前,检查它是否仍然是活动的,如果不是重新连接。

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

在网络上通信时,您应该预期到一些停机时间,并将您的客户端和服务器编写为容错。

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

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

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

最新更新