2014-03-30
展开全部
你可以根据服务器收到的数据的长度来判断,如果服务器收到的数据长度是0,那么意味着你的客户端程序已经断开了连接。从TCP/IP协议栈的角度来说,就是客户端程序关闭了自己写的这一半连接,向服务器发出了一个FIN。这涉及到TCP的状态迁移,关于这方面的知识,建议你看一下Richard Stevens先生的《TCP/IP 详解》卷一和《Unix网络编程》卷一,上面有详细的解释。
关于你的第二个问题,建议你仔细看一下自己的服务器程序代码。服务器程序首先要建立一个监听socket,当有客户端连接上来时,服务器会在一个新socket上接受客户端连接。所以并不存在“乱”的问题。关于这个问题同样推荐你看上面的两本关于网络编程的经典著作。
关于你的第二个问题,建议你仔细看一下自己的服务器程序代码。服务器程序首先要建立一个监听socket,当有客户端连接上来时,服务器会在一个新socket上接受客户端连接。所以并不存在“乱”的问题。关于这个问题同样推荐你看上面的两本关于网络编程的经典著作。
展开全部
tcp 还是 udp?
tcp 的话 try - catch 就行了,因为 tcp 要求的是稳定的连接,连接一断开直接就 throw exception 了。
udp 的话,因为它本身是无连接的协议,所以其实不存在断开不断开的,准确的说应该是超时。可以客户端每隔一段时间向服务端发送个心跳包(随便什么数据都行,只是证明客户端还在线),服务端每隔一段时间检测在线的客户端列表,谁已经很久没发来心跳包了就证明它掉线了。
tcp 的话 try - catch 就行了,因为 tcp 要求的是稳定的连接,连接一断开直接就 throw exception 了。
udp 的话,因为它本身是无连接的协议,所以其实不存在断开不断开的,准确的说应该是超时。可以客户端每隔一段时间向服务端发送个心跳包(随便什么数据都行,只是证明客户端还在线),服务端每隔一段时间检测在线的客户端列表,谁已经很久没发来心跳包了就证明它掉线了。
更多追问追答
追问
tcp, 但是我不知道该用socket的哪个指令啊? socket.???? 是不是应该用到线程啊? 因为连接的数量不止一个,判断的个数也不止一个!
追答
1、不需要额外指令,有一方断开必然弹错,只需要在 catch 里处理错误就可以了。
2、多客户端必然需要多线程啊,不然怎么能同时对客户端进行响应?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询