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

时间:2013-04-19 08:45:29

标签: java sockets

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

然而,这是一个很大的问题,现在是:

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

但正如我所提到的,几乎不可能在几个小时内交换消息而不会引起一些恐惧。

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

如果您还需要从服务器接收数据,因此您需要始终保持连接状态,您最好通过检查连接是否以固定间隔激活,如果没有则重新建立连接。

答案 2 :(得分:0)

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

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

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

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