当前位置: 首页 > news >正文

做网站被骗该咋样做淘宝指数在线查询

做网站被骗该咋样做,淘宝指数在线查询,公益网站建设,python怎么搭建网站看到这个标题,估计很多人会说用socket.isConnected()或者socket.isClosed()等方法来判断就行了,但事实上这些方法都是访问socket在内存驻留的状态,当socket和服务器端建立链接后,即使socket链接断掉了,调用上面的方法返…

    看到这个标题,估计很多人会说用socket.isConnected()或者socket.isClosed()等方法来判断就行了,但事实上这些方法都是访问socket在内存驻留的状态,当socket和服务器端建立链接后,即使socket链接断掉了,调用上面的方法返回的仍然是链接时的状态,而不是socket的实时链接状态,下面给出例子证明这一点。

服务器端:

package com.csc.server;
import java.net.*;
/*** @description 从这里启动一个服务端监听某个端口* @author csc*/
public class DstService {public static void main(String[] args) {try {			// 启动监听端口 30000ServerSocket ss = new ServerSocket(30000);// 没有连接这个方法就一直堵塞Socket s = ss.accept();// 将请求指定一个线程去执行new Thread(new DstServiceImpl(s)).start();} catch (Exception e) {e.printStackTrace();}}
}
    这里我设置了启动新线程来管理建立的每一个socket链接,此处我们设置收到链接后10秒端来链接,代码如下:
package com.csc.server;
import java.net.Socket;
/*** @description 服务的启动的线程类* @author csc*/
public class DstServiceImpl implements Runnable {Socket socket = null;public DstServiceImpl(Socket s) {this.socket = s;}public void run() {try {int index = 1;while (true) {// 5秒后中断连接if (index > 10) {socket.close();System.out.println("服务端已经关闭链接!");break;}index++;Thread.sleep(1 * 1000);//程序睡眠1秒钟}} catch (Exception e) {e.printStackTrace();}}
}
    以上是服务端代码,下面写一个客户端代码来测试:
package com.csc.client;
import java.net.*;
/*** @description 客户端打印链接状态* @author csc*/
public class DstClient {public static void main(String[] args) {try {Socket socket = new Socket("127.0.0.1", 30000);socket.setKeepAlive(true);socket.setSoTimeout(10);while (true) {System.out.println(socket.isBound());System.out.println(socket.isClosed());System.out.println(socket.isConnected());System.out.println(socket.isInputShutdown());System.out.println(socket.isOutputShutdown());System.out.println("------------我是分割线------------");Thread.sleep(3 * 1000);}} catch (Exception e) {e.printStackTrace();}}
}
    先运行服务端代码,再运行客户端代码,我们会在客户端代码的控制台看到如下信息:
true
false
true
false
false
------------我是分割线------------
    从连接对象的属性信息来看,连接是没有中断,但实际链接已经在服务端建立链接10秒后断开了。这说明了上述几个方法是不能实时判断出socket的链接状态,只是socket驻留在内存的状态。其实,此时如果调用流去读取信息的话,就会出现异常。

    其实,想要判断socket是否仍是链接状态,只要发一个心跳包就行了,如下一句代码:

socket.sendUrgentData(0xFF); // 发送心跳包
    关于心跳包的理论可以去google一下,我给出点参考:心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。 用来判断对方(设备,进程或其它网元)是否正常运行,采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经离线。用于检测TCP的异常断开。基本原因是服务器端不能有效的判断客户端是否在线,也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。 比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理,一般是客户端。服务器也可以定时发心跳下去。一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是服务器向客户端发。客户端每隔一段时间发一个包,使用TCP的,用send发,使用UDP的,用sendto发,服务器收到后,就知道当前客户端还处于“活着”的状态,否则,如果隔一定时间未收到这样的包,则服务器认为客户端已经断开,进行相应的客户端断开逻辑处理!

    既然找到了方法,我们就在测试一下,服务端代码无需改动,客户端代码如下:

package com.csc.client;
import java.net.*;
/*** @description 客户端打印链接状态* @author csc*/
public class DstClient {public static void main(String[] args) {try {Socket socket = new Socket("127.0.0.1", 30000);socket.setKeepAlive(true);socket.setSoTimeout(10);while (true) {socket.sendUrgentData(0xFF); // 发送心跳包System.out.println("目前处于链接状态!");Thread.sleep(3 * 1000);//线程睡眠3秒}} catch (Exception e) {e.printStackTrace();}}
}

    重新运行客户端程序,看到控制台打印如下信息:

    服务端程序运行10秒后再当执行“socket.sendUrgentData(0xFF);”语句时,socket链接断开了,所以会抛出异常。
    另外注意,心跳包只是用来检测socket的链接状态,并不会作为socket链接的通信内容,这点应当注意。
    转载请注明出处:http://blog.csdn.net/caoshichao520326/article/details/8900446

http://www.lbrq.cn/news/2581255.html

相关文章:

  • 设计教程网站有哪些上海seo推广外包
  • 上海品牌设计公司有哪些seo技术公司
  • 大型网站建设设备网络营销工程师是做什么的
  • 建设好网站能赚到钱吗泉州百度网络推广
  • 东莞市网站建设泉州百度开户
  • 字体设计学习网站网络营销能干什么工作
  • 中卫市住房建设局网站电子商务网站建设论文
  • 哪些网站是做色选机销售的seo人员工作内容
  • 个人网站前置审批项拼多多商品关键词搜索排名
  • 深圳南山企业网站建设网上教育培训机构哪家好
  • 山东网站制作抖音seo排名优化软件
  • 北京市政府部门网站建设头条今日头条新闻头条
  • 外卖网站建设的毕业论文世界足球排名前十名
  • 绵阳做手机网站建设桔子seo网
  • 做网站需不需要营业执照百度获客
  • wordpress大淘客seo排名优化课程
  • 南充做网站公司seo公司优化方案
  • 虚拟空间wordpress固定链接404西青seo
  • 网站建设费可以计入管理费用吗简述搜索引擎优化的方法
  • 如何确定网站建设 栏目网站建设网站设计
  • 深圳网站设计制作元广告投放公司
  • .com网站建设软文案例400字
  • 小吃加盟网站大全长沙网站优化排名推广
  • 网站建设苏州沈阳seo博客
  • 太仓公司网站建设电话外链在线发布工具
  • 免费网站建设模块软件开发公司排行榜
  • 华硕固件做网站6推广一个产品有哪些方式
  • iis为网站子目录绑定二级域名郑州模板建站代理
  • 网站建设有趣小游戏长沙seo霜天
  • 杭州建设网 郎鑫沈阳高端关键词优化
  • 二叉树的锯齿形层次遍历
  • 关于assert()函数,eval()函数,include
  • GaussDB SQL执行计划详解
  • (论文速读)探索多模式大型语言模型的视觉缺陷
  • [Oracle] TO_DATE()函数
  • 如何优雅删除Docker镜像和容器(保姆级别)