0

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

但是有一个大问题,这里是:

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

但正如我所提到的,几乎不可能在超过几个小时的时间内交换消息而不会遇到一些错误。

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

使用 Sockets 真的有那么复杂吗?

其实我必须作为一个真正的问题。所以这里是:

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

4

3 回答 3

2

Java中的基本客户端-服务器编程。

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

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

于 2013-04-19T08:53:57.157 回答
1

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

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

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

于 2013-04-19T08:53:59.420 回答
0

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

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

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

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

于 2013-04-19T09:25:41.787 回答