关于java tcp socket的一些笔记待整理

待整理,后续会补全

我做安卓开发的时候socket遇到了很多的异常问题
主要表现就是broken pipe
网络断开导致的Software caused connection abort
以及连不上服务器Network is unreachable Connection refused
等等的问题,所以我就做了一些小实验
做实验的主要目的是为了查看那些情况会出现broken pipe
然而并没有发现什么情况会出现broken pipe这个异常的
首先就是正常的关闭客户端或者服务端然后让程序保持非关闭的状态,发现并没有发生异常的抛出,什么异常都没有的
然后就是正常的关闭客户端或者服务端之后继续收发消息,一样也没有任何的异常,并且检查到isclose 和 isConnect isBound都是false true true,也就是说我根本呢就没办法通过这几个变量来判断是不是我已经下线了,也没有办法通过是不是我抛异常了来确定自己是否下线了。

简单处理socket
也就是不考虑抛异常的情况下,所以开发当中应该通过双边应答机制来做做socket,也就是客户端如果发送了消息,那么服务端必须做出应答,服务端发出消息,那么客户端也必须做出应答。
然后就是登陆操作,登录操作不用说,客户端必须发送登陆指令。然后服务器必须做出应答。
心跳也是一样,客户端发出心跳,服务器必须做出应答。这样客户端才能知道自己是不是还活着,服务器知道这个用户是否还活跃。
再就是退出操作,在退出APP的时候,这个时候非常的不好判断的,尽量写在服务里面做单独的登出操作,这个时候向服务器发出登出指令,然后关闭socket,服务端接受到登出指令后,这是唯一一个不需要返回给客户端的指令,将此用户的token删除。
然后再就是服务器这边如果长时间未收到客户端的心跳包,也没有收到其他的任何消息的时候,可以直接socket.close
这个时候客户端这边是收不到任何的消息的,所以客户端这边必须

猜你喜欢

转载自blog.csdn.net/arios171/article/details/79526710