我遇到了J2ME客户端应用程序的问题,该应用程序将数据发送到J2SE服务器,并立即关闭发送套接字。在J2ME端,我在OutputStream
上使用普通SocketConnection
,并使用小数据包(~30字节)重复调用write
。然后,我flush
,最后close
流和连接。
在模拟器中运行客户端时,一切正常。但是使用真实的设备我会遇到一些问题...
我注意到无论我在客户端做什么,连接都没有正确关闭。我总是在服务器上获得Connection reset
异常,根据TCP指示连接或发送方中的错误,这意味着将放弃所有后续数据并且不再使用连接。 (使用模拟器,服务器上的read
最终返回-1
,表示连接已正确关闭,完全没有例外......)
我尝试使用总数据包大小(1024,2048,...)和客户端套接字选项(Delay,Linger,Keep alive)。我还在Thread.sleep
和flush
之间尝试了close
...在服务器端,发生了不同的事情:
read
方法(延迟和总大小约为2048)在所有情况下,客户端都已成功发送了整个数据。
确保对方收到所有数据的最佳方法是什么?正如我所说,J2ME客户端声明所有数据都已成功编写! (总大小不能固定为特定值)
提前致谢!
答案 0 :(得分:0)
这看起来像是设备中的错误,您可以从J2SE端发送消息以确认接收,并在J2ME端等待您收到此消息以关闭套接字。