Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java J2ME应用程序关闭套接字:服务器未获取所有数据_Java_Sockets_Java Me - Fatal编程技术网

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

Java J2ME应用程序关闭套接字:服务器未获取所有数据,java,sockets,java-me,Java,Sockets,Java Me,我的J2ME客户端应用程序有问题,它向J2SE服务器发送数据,并立即关闭发送套接字。在J2ME方面,我在SocketConnection上使用一个普通的OutputStream,并使用大约30字节的小数据包重复调用write。之后,我刷新并最终关闭流和连接 在模拟器中运行客户端时,一切正常。但是用真正的设备我遇到了一些问题 我注意到,无论我在客户端做什么,连接都没有正确关闭。我总是在服务器上收到一个连接重置异常,根据TCP,它表示连接或发送方中存在错误,这意味着所有后续数据都将被放弃,连接将不再

我的J2ME客户端应用程序有问题,它向J2SE服务器发送数据,并立即关闭发送套接字。在J2ME方面,我在SocketConnection上使用一个普通的OutputStream,并使用大约30字节的小数据包重复调用write。之后,我刷新并最终关闭流和连接

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

我注意到,无论我在客户端做什么,连接都没有正确关闭。我总是在服务器上收到一个连接重置异常,根据TCP,它表示连接或发送方中存在错误,这意味着所有后续数据都将被放弃,连接将不再使用。使用emulator,服务器上的读取最终返回-1,表示连接已正确关闭,没有任何异常

我试着玩的总数据包大小10242048。。。使用客户端套接字选项延迟、逗留、保持活动。我还试了一根线。在冲水和关门之间睡觉。。。在服务器端,会发生不同的情况:

只有大约30字节的第一个数据包被接收,然后异常w/o延迟 接收部分数据约1500字节,然后不再读取更多数据,也不会引发异常,在读取方法中永远阻塞,延迟和总大小约为2048 所有数据都正确接收,然后异常延迟,总大小约为1024 在所有情况下,客户端都成功地发送了整个数据

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


提前谢谢

这看起来像是你设备中的一个bug。你可以从J2SE端发送一条消息来确认接收情况,然后在J2ME端等待你接收到这条消息以关闭套接字。

我希望在没有移动应用程序做出反应的情况下有可能。。。我添加了一个特殊的停止字节,现在可以工作了。我甚至不再得到异常,因为连接已正确关闭!然而,我认为Linger选项在关闭连接后在后台等待,直到所有数据都被确认。。。