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

做苗木网站哪家好鹤山网站建设

做苗木网站哪家好,鹤山网站建设,谷歌在线搜索,如何将一个网页生成链接要判断socket连接链路是否可用时#xff0c;不能通过socket.isClosed() 和 socket.isConnected() 方法判断#xff0c;要通过心跳包 socket.sendUrgentData(0xFF) 。 当第一次连接成功后#xff0c; socket.isClosed() false, socket.isConnected()true#xff0c;只有在自…  要判断socket连接链路是否可用时不能通过socket.isClosed() 和 socket.isConnected() 方法判断要通过心跳包 socket.sendUrgentData(0xFF) 。 当第一次连接成功后 socket.isClosed() false, socket.isConnected()true只有在自己端代码中显示调用socket.close()方法时socket.isClosed() true。 而链路的不可用时自己端的socket是不知道的仍然是 socket.isClosed() false, socket.isConnected()true。 要通过心跳包 socket.sendUrgentData(0xFF)  进行测验。   我们来看如下代码运行后再继续 服务端 Java代码   package com.service;  import java.net.*;  /**  * 说明 从这里启动一个服务端监听某个端口  * author 崔素强  */  public class DstService {      public static void main(String[] args) {          try {                         // 启动监听端口 8001              ServerSocket ss  new ServerSocket(8001);              // 没有连接这个方法就一直堵塞              Socket s  ss.accept();              // 将请求指定一个线程去执行              new Thread(new DstServiceImpl(s)).start();          } catch (Exception e) {              e.printStackTrace();          }      }  }   然后我们来看执行类执行类在收到连接5秒后中断连接   Java代码   package com.service;  import java.net.Socket;  /**  * 说明 服务的具体执行类  * author 崔素强  */  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  5) {                      socket.close();                      System.out.println(服务端已经将连接关闭);                      break;                  }                  index;                  Thread.sleep(1 * 1000);              }          } catch (Exception e) {              e.printStackTrace();          }      }  }   我们在写一个客户端进行实验 Java代码   package com.client;  import java.net.*;  /**  * 说明 服务的客户端会请求连接并实时打印连接对象的一些信息但是不会进行流的操作  * author 崔素强  */  public class DstClient {      public static void main(String[] args) {          try {              Socket socket  new Socket(127.0.0.1, 8001);              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();          }      }  }      至于输出结果虽然服务端已经中断连接但是客户端一直输出下面内容 Xml代码   true  false  true  false  false  ------------------------    从连接对象的属性信息来看连接似乎没有中断。但实际虽然内存对象可用但是物理连接已经失效。所以和网上其他抄袭来抄袭去的说法一样靠连接对象属性来判断连接的可用性是不可行的。 大家会说那就判断调用read方法是否报错呗。我之前有文章已经讨论了关于调用网络里面流的一些内容在没有判断这个流可用之前我们是不会调用read方法的当然具体你是怎么做的我不知道我在说我的情况 读取网络数据流时的那个方法是这样的 Java代码   public static byte[] inputStreamToByte(InputStream inStream)          throws Exception {      int count  0;      int haveCheck  0;      // 如果在网络传输中数据没有完全传递则方法返回0      while (count  0) {          count  inStream.available();          haveCheck;          if (haveCheck  50)              return null;      }      byte[] b  new byte[count];      inStream.read(b);      return b;  }    就是说我们不会直接调用read方法而available方法在流没有完整和网络中断时都会返回0不会报错。 就是说就算你设置超时时间设置保持连接这些东西只要你没有调用read的机会你的程序就不会出问题。当然如果程序一直不调用read方法那这个程序可真的够扯淡的了。 其实只要在使用这个连接的时候判断这个连接的可用性就行了不要等着什么超时。 判断连接可用虽然网上一大片其实就是那么回事手动发送心跳包。 Java代码   socket.sendUrgentData(0xFF); // 发送心跳包    如果你的连接已经中断那么这个方法就会报错。 至于什么是心跳包直接上理论吧。 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字按照一定的时间间隔发送类似于心跳所以叫做心跳包。 用来判断对方设备进程或其它网元是否正常运行采用定时发送简单的通讯包如果在指定时间段内未收到对方响应则判断对方已经离线。用于检测TCP的异常断开。基本原因是服务器端不能有效的判断客户端是否在线也就是说服务器无法区分客户端是长时间在空闲还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。 比如有些通信软件长时间不使用要想知道它的状态是在线还是离线就需要心跳包定时发包收包。发包方可以是客户也可以是服务端看哪边实现方便合理一般是客户端。服务器也可以定时发心跳下去。一般来说出于效率的考虑是由客户端主动向服务器端发包而不是服务器向客户端发。客户端每隔一段时间发一个包使用TCP的用send发使用UDP的用sendto发服务器收到后就知道当前客户端还处于“活着”的状态否则如果隔一定时间未收到这样的包则服务器认为客户端已经断开进行相应的客户端断开逻辑处理 当然不能单纯理解心跳包就是往对方放松数据因为心跳包是用于状态验证的不是真实的数据。 我们来看如下例子服务端不变 Java代码   package com.client;  import java.net.*;  /**  * 说明 服务的客户端会请求连接并实时打印连接对象的一些信息但是不会进行流的操作  * author 崔素强  */  public class DstClient {      public static void main(String[] args) {          try {              Socket socket  new Socket(127.0.0.1, 8001);              socket.setKeepAlive(true);              socket.setSoTimeout(10);              while (true) {                  socket.sendUrgentData(0xFF); // 发送心跳包                  System.out.println(目前是正常的);                  Thread.sleep(3 * 1000);              }          } catch (Exception e) {              e.printStackTrace();          }      }  }    看到控制台的输出 Java代码   目前是正常的  目前是正常的  java.net.SocketException: Invalid argument: send      at java.net.PlainSocketImpl.socketSendUrgentData(Native Method)      at java.net.PlainSocketImpl.sendUrgentData(PlainSocketImpl.java:550)      at java.net.Socket.sendUrgentData(Socket.java:928)      at com.client.DstClient.main(DstClient.java:14)    那就是说只要你的服务端断了调用方法就会出错 至于我说的他不会作为可见的数据你可以更改服务端代码打印客户端内容你会发现服务端不会将心跳包内容展示给你 Java代码   InputStream ips  socket.getInputStream();  byte[] bt  inputStreamToByte(ips);  if(null ! bt)      System.out.println(new String(bt));  else      System.out.println(Bt is null);  System.out.println(****************************);  转载于:https://www.cnblogs.com/panchanggui/p/9664876.html
http://www.huolong8.cn/news/61470/

相关文章:

  • 山东网站建设价格实惠网络规划设计师考纲教材改版新旧对比
  • 万网域名怎样把淘宝网站加进去电商网站硬件配置
  • 国家水资源监控能力建设网站今天的新闻大事
  • 网站备案证书下载有没有专门做胜负彩的网站
  • 网站建设及解决方案网站建设课程职业教育机构
  • 国内网站开发外包网
  • 电子商务学网站建设好吗后台网站模板下载
  • 网站建设都有什么栏目学校门户网站怎么做
  • 东莞市国外网站建设哪家好购买海外商品的平台
  • 做网站为什么不要源代码网站备案 四川
  • 东莞寮步网站建设无锡定制公司网站
  • 深圳网站开发公司 有哪些申请自助建站
  • 用jsp实现网站开发的流程西安企业名录电话资料
  • 珠海网站建设策划生猪价格
  • 金泉网是做网站的吗怎样制作app文件
  • 个人网站做外链方法英文公司网站模板
  • 海珠区建设和水务局网站创建一家公司需要什么过程
  • 有没有做代理商的明细网站wordpress 新建模版
  • 国外比较开放的浏览器杭州seo网站推广软件
  • dede响应式网站模板下载甘肃网站建设制作商
  • 外贸 网站 建设 高端高端网站建设公司怎么选
  • 小米的网站是哪个公司做的成都建好的网站出租
  • 长沙专业网站制作做海报可以在哪些网站下载素材
  • 足球比赛直播雨燕上海关键词seo
  • 公司网站建设办法深圳网络推广大师
  • php彩票网站建设教程网站推广名片
  • 龙岩建设局网站声明域名查询入口
  • 什么网站做禽苗好的网站溧阳免费做网站
  • ps工具设计网站西安网站建设哪家强
  • 网站开发教学网站网站备案 自己的服务器