J2ME应用程序关闭套接字:服务器无法获取所有数据

时间:2010-07-02 09:39:29

标签: java sockets java-me

我遇到了J2ME客户端应用程序的问题,该应用程序将数据发送到J2SE服务器,并立即关闭发送套接字。在J2ME端,我在OutputStream上使用普通SocketConnection,并使用小数据包(~30字节)重复调用write。然后,我flush,最后close流和连接。

在模拟器中运行客户端时,一切正常。但是使用真实的设备我会遇到一些问题...

我注意到无论我在客户端做什么,连接都没有正确关闭。我总是在服务器上获得Connection reset异常,根据TCP指示连接或发送方中的错误,这意味着将放弃所有后续数据并且不再使用连接。 (使用模拟器,服务器上的read最终返回-1,表示连接已正确关闭,完全没有例外......)

我尝试使用总数据包大小(1024,2048,...)和客户端套接字选项(Delay,Linger,Keep alive)。我还在Thread.sleepflush之间尝试了close ...在服务器端,发生了不同的事情:

  • 仅收到大约30字节的第一个数据包,然后是异常(没有延迟)
  • 接收部分数据(~1500字节),然后不再读取数据,也不会抛出任何异常,永久阻塞read方法(延迟和总大小约为2048)
  • 正确接收所有数据,然后例外(延迟和总大小约为1024)

在所有情况下,客户端都已成功发送了整个数据。

确保对方收到所有数据的最佳方法是什么?正如我所说,J2ME客户端声明所有数据都已成功编写! (总大小不能固定为特定值)

提前致谢!

1 个答案:

答案 0 :(得分:0)

这看起来像是设备中的错误,您可以从J2SE端发送消息以确认接收,并在J2ME端等待您收到此消息以关闭套接字。