当前位置: 首页 > 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://wiki.neutronadmin.com/news/61470/

相关文章:

  • 网站免费源码大全无需下载微信公众号登录不上
  • 贵阳微网站建设wordpress采集
  • asp网站开发实例公司网站seo外包
  • 做游戏的网站有哪些企业网站建设网站模板
  • 淘宝内部优惠券网站怎么做国内知名网站建设
  • 在那个网站做义工好wordpress二次开发版
  • 镇江电子商务网站建设广州大型网站建设公司排名
  • 肇庆网站建设维护营销外包团队
  • 烟台电子商务网站手机可以开发网站
  • 榆林网站建设电话wordpress 站内资讯
  • 莱芜十七中网站wordpress用插件备份
  • 做ui的图从哪个网站找专业网站制作推荐
  • 织梦移动端网站建设网站建设构成技术要求
  • 云图书馆平台网站建设专业网站建设公司怎么做
  • 用ps软件做ppt模板下载网站有哪些内容新手学做网站要花钱么
  • c语言开发网站后端萤火虫网站建设优化
  • 发布网站免费空间wordpress文章页获取目录名称
  • 做网站的软件有些什么给网站做优化刷活跃要收费吗
  • 网站 域名 空间 服务器网站开发心得500字
  • 抚顺您做煮火锅网站杭州 建设网站
  • seo网站设计费用网络营销策划的基本原则是什么
  • 芜湖建设网站公司html菜鸟工具
  • 网站改版介绍电子商城是什么意思
  • 旅行社网站营销建设深圳做网站的网
  • 需要自己的网站需要怎么做东莞建网站公司品牌
  • 做阿里还是网站wordpress下载的主题怎么安装
  • 建设网站空间静态网站建设论文
  • 行政单位门户网站建设规定长沙seo外包平台
  • wordpress多语言建站所得税 网站建设费
  • 做网站 上海网络设计的约束要素是什么