
我有一个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:连接重置和连接超时所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)