java-奇怪的SocketExceptions:连接重置和连接超时

java-奇怪的SocketExceptions:连接重置和连接超时,第1张

概述我有一个JavaTCP服务器和一个AndroidTCP客户端.服务器等待请求,然后将50MB的数据发送到Android客户端(后者通过循环数组并覆盖数据进行读取,因此数据不会保存在手机上.)一切正常且繁琐,但在随机时间客户端崩溃有了这个:java.net.SocketException:Connectiontimedout然后服

我有一个Java TCP服务器和一个Android TCP客户端.服务器等待请求,然后将50MB的数据发送到AndroID客户端(后者通过循环数组并覆盖数据进行读取,因此数据不会保存在手机上.)一切正常且繁琐,但在随机时间客户端崩溃有了这个:

java.net.socketException: Connection timed out

然后服务器得到这个:

java.net.socketException: connection reset

客户端读取一个循环,直到接收到所有数据为止(我允许一次调用读取的最大数据量为1.5MB.

服务器发送如下:

connectionSocket.getoutputStream().write(new byte[1024*1024*10*5]);

我正在循环客户端并尝试执行5-10次此传输,以便可以进行电池寿命测量,但是我很少能成功完成50MB传输的3次.我真的很茫然…我的设置非常简单.我愿意发布代码,如果有帮助的话.

这是崩溃时adb logcat对androID的说明:

...transferingD/WifiService(  109): got ACTION_DEVICE_IDLEE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyV/WifiMonitor(  109): Event [CTRL-EVENT-STATE-CHANGE ID=1 state=8]V/WifiStateTracker(  109): Changing supplicant state: COMPLETED ==> DORMANTD/WifiStateTracker(  109): reset connections and stopPing DHCPE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyE/wpa_supplicant(  209): Set_key: Wrong KeyV/WifiMonitor(  109): Event [CTRL-EVENT-disCONNECTED - disconnect event - remove keys]V/WifiMonitor(  109): Event [CTRL-EVENT-STATE-CHANGE ID=-1 state=8]D/WifiStateTracker(  109): disabling interfaceD/NetworkStateTracker(  109): setDetailed state, old =CONNECTED and new state=IDLEV/WifiMonitor(  109): Event [CTRL-EVENT-DRIVER-STATE StopPED]V/WifiStateTracker(  109): New network state is disCONNECTEDV/WifiStateTracker(  109): Changing supplicant state: DORMANT ==> DORMANTD/ConnectivityService(  109): ConnectivityChange for WIFI: disCONNECTED/IDLED/ConnectivityService(  109): getMobileDataEnabled returning falseD/ConnectivityService(  109): not failing over to mobile type 0 because Mobile Data DisabledD/ConnectivityService(  109): not failing over to mobile type 2 because Mobile Data DisabledD/ConnectivityService(  109): not failing over to mobile type 3 because Mobile Data DisabledD/ConnectivityService(  109): not failing over to mobile type 4 because Mobile Data DisabledD/ConnectivityService(  109): not failing over to mobile type 5 because Mobile Data DisabledD/Tethering(  109): Tethering got CONNECTIVITY_ACTIOND/Tethering(  109): MasterInitialState.processMessage what=3E/HIErarchicalStateMachine(  109): TetherMaster - unhandledMessage: msg.what=3I/ActivityManager(  109): Start proc androID.process.media for broadcast com.androID.provIDers.downloads/.DownloadReceiver: pID=793 uID=10004 gIDs={1015, 2001, 3003}D/NetworkLocationProvIDer(  109): updateNetworkState(): Updating network state to 1I/ActivityThread(  793): Publishing provIDer media: com.androID.provIDers.media.MediaProvIDerV/MediaProvIDer(  793): Attached volume: internalV/MediaProvIDer(  793): /mnt/sdcard volume ID: 845505849V/MediaProvIDer(  793): Attached volume: externalI/ActivityThread(  793): Publishing provIDer downloads: com.androID.provIDers.downloads.DownloadProvIDerI/ActivityThread(  793): Publishing provIDer drm: com.androID.provIDers.drm.DrmProvIDerI/GTalkService(  243): [ServiceautoStarter] --- connectivity changedI/GTalkService(  243): [ServiceautoStarter] --- start GTalk service ---I/ActivityManager(  109): Start proc com.Google.androID.apps.uploader for broadcast com.Google.androID.apps.uploader/.ConnectivitybroadcastReceiver: pID=801 uID=10027 gIDs={3003}D/GTalkService(  243): [GTalkService.1] onStartCommand: found 0 connections, force audit connections...D/GoogleLoginService(  243): onBind: Intent { act=androID.accounts.AccountAuthenticator cmp=com.Google.androID.gsf/.loginservice.GoogleLoginService }W/GoogleLoginService(  243): Device has no accounts: sending Intent { act=com.Google.androID.gsf.LOGIN_ACCOUNTS_MISSING }D/GTalkService(  243): [GTalkService.25] account missingI/ActivityThread(  801): Publishing provIDer com.Google.androID.apps.uploader: com.Google.androID.apps.uploader.UploadsContentProvIDerI/ActivityThread(  801): Publishing provIDer com.Google.photos.provIDer.Album: com.Google.androID.apps.uploader.clIEnts.picasa.AlbumProvIDerD/MediaUploader(  801): UploaderApplication.onCreateD/MediaUploader(  801): nonWifilimit=20971520, default=20971520I/MediaUploader(  801): No need to wake upI/ActivityManager(  109): Process com.Google.androID.apps.genIE.genIEWidget (pID 442) has dIEd.W/ActivityManager(  109): Scheduling restart of crashed service com.Google.androID.apps.genIE.genIEWidget/.GenIERefreshService in 5000msI/IO exception (  766): ******************** Log Msg IOE java.net.socketException: Connection timed out**W/System.err(  766): java.net.socketException: Connection timed outW/System.err(  766):    at org.apache.harmony.luni.platform.OSNetworkSystem.readSocketImpl(Native Method)W/System.err(  766):    at org.apache.harmony.luni.platform.OSNetworkSystem.read(OSNetworkSystem.java:358)W/System.err(  766):    at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:561)W/System.err(  766):    at org.apache.harmony.luni.net.socketinputStream.read(SocketinputStream.java:88)W/System.err(  766):    at com.mdog.datareceive.Receive.onReceive(Receive.java:71)W/System.err(  766):    at androID.app.ActivityThread$PackageInfo$Receiverdispatcher$Args.run(ActivityThread.java:892)W/System.err(  766):    at androID.os.Handler.handleCallback(Handler.java:587)W/System.err(  766):    at androID.os.Handler.dispatchMessage(Handler.java:92)W/System.err(  766):    at androID.os.Looper.loop(Looper.java:123)W/System.err(  766):    at androID.app.ActivityThread.main(ActivityThread.java:4627)W/System.err(  766):    at java.lang.reflect.Method.invokeNative(Native Method)W/System.err(  766):    at java.lang.reflect.Method.invoke(Method.java:521)W/System.err(  766):    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)W/System.err(  766):    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)W/System.err(  766):    at dalvik.system.NativeStart.main(Native Method)**I/ActivityManager(  109): Start proc com.Google.androID.apps.genIE.genIEWidget for service com.Google.androID.apps.genIE.genIEWidget/.GenIERefreshService: pID=811 uID=10031 gIDs={3003, 1015}

这是服务器异常:

Exception in thread "main" java.net.socketException: Connection reset    at java.net.socketoutputStream.socketWrite(SocketoutputStream.java:96)    at java.net.socketoutputStream.write(SocketoutputStream.java:124)    at com.mdog.tcpserver.ServerDriver.main(ServerDriver.java:55)

解决方法:

连接断开的原因有很多,从基础结构(如Dan指出的)到要进入睡眠状态的设备.您可能想尝试请求唤醒锁,看看是否有帮助.此外,通过随机按下触摸屏以使设备保持睡眠状态,可以查看是否与睡眠有关.

另一方面,如果您只是捕获到Exception并立即重新连接并重试,则您的测量值不应过高.您可能还想尝试使用UDP而不是TCP(无法超时).但是请确保监视吞吐量是否下降.

总结

以上是内存溢出为你收集整理的java-奇怪的SocketExceptions:连接重置和连接超时全部内容,希望文章能够帮你解决java-奇怪的SocketExceptions:连接重置和连接超时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1068432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存