在socket类中有一个方法sendUrgentData,它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节(在Java 中是抛出异常),而SO_OOBINLINE属性默认情况下就是关闭的。推荐:java视频教程

示例:public class Nksocket extends Thread{

public String ip=null;//连接服务器的IP

public Integer port=null;//连接服务器的端口

private Socket socket=null;//套节字对象

private boolean close = false; // 关闭连接标志位,true表示关闭,false表示连接

private Integer sotimeout=1*1*10;//超时时间,以毫秒为单位

//------------------------------------------------------------------------------

public Nksocket(){

init();

}

public Nksocket(String ip,Integer port){

setIp(ip);

setPort(port);

init();

}

/**

* 初始化socket对象

*/

public void init(){

try {

InetAddress address = InetAddress.getByName(getIp());

socket = new Socket(address,getPort());

socket.setKeepAlive(true);//开启保持活动状态的套接字

socket.setSoTimeout(sotimeout);//设置超时时间

close=!Send(socket,"2");//发送初始数据,发送成功则表示已经连接上,发送失败表示已经断开

}catch(UnknownHostException e) {

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}

}

/**

* 读数据线程

*/

public void run() {

while(true){

//---------读数据---------------------------

close = isServerClose(socket);//判断是否断开

if(!close){//没有断开,开始读数据

String readtext = ReadText(socket);

if(readtext!=null && readtext.trim().length()>0){

System.out.println("读取数据:"+readtext);

}

}

//---------创建连接-------------------------

while(close){//已经断开,重新建立连接

try{

System.out.println("重新建立连接:"+getIp()+":"+getPort());

InetAddress address = InetAddress.getByName(getIp());

socket = new Socket(address,getPort());

socket.setKeepAlive(true);

socket.setSoTimeout(sotimeout);

close = !Send(socket,"2");

System.out.println("建立连接成功:"+getIp()+":"+getPort());

}catch(Exception se){

System.out.println("创建连接失败:"+getIp()+":"+getPort());

close=true;

}

}

}

}

/**

* 发送数据,发送失败返回false,发送成功返回true

* @param csocket

* @param message

* @return

*/

public Boolean Send(Socket csocket,String message){

try{

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

out.println(message);

return true;

}catch(Exception se){

se.printStackTrace();

return false;

}

}

/**

* 读取数据,返回字符串类型

* @param csocket

* @return

*/

public String ReadText(Socket csocket){

try{

csocket.setSoTimeout(sotimeout);

InputStream input = csocket.getInputStream();

BufferedReader in = new BufferedReader(new InputStreamReader(input));

char[] sn = new char[1000];

in.read(sn);

String sc = new String(sn);

return sc;

}catch(IOException se){

return null;

}

}

/**

* 判断是否断开连接,断开返回true,没有返回false

* @param socket

* @return

*/

public Boolean isServerClose(Socket socket){

try{

socket.sendUrgentData(0xFF);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信

return false;

}catch(Exception se){

return true;

}

}

/**

* 测试

* @param ags

*/

public static void main(String[] ags){

Nksocket nksocket = new Nksocket("127.0.0.1",8090);

nksocket.start();

}

//------------------------------------------------------------------------------

public String getIp() {

return ip;

}

public void setIp(String ip) {

this.ip = ip;

}

public Integer getPort() {

return port;

}

public void setPort(Integer port) {

this.port = port;

}

}

更多java知识请关注PHP中文网java基础教程栏目。

java判断socket是否连接_java判断socket是否连接相关推荐

  1. java中socket编程实例_Java中socket编程的实现过程(代码实例)

    本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...

  2. java 网络io详解_Java网络socket编程详解

    或许有点长 但是一步步教你 我想你也愿意看7.2面向套接字编程 我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socket的具体工作方式7.2.1使用套接字实现基于 ...

  3. java socket 阻塞模式_Java中Socket Read阻塞问题

    本人来说并不熟悉JAVA语言,只是近期在分析某个简单的java agent程序时,根据对应的代码写了一个对接的程序,两者之间是典型的C/S socket编程.客户端在向服务端发送相应的指令后,服务端( ...

  4. java socket 聊天室_java利用Socket实现聊天室功能实例

    导读热词 最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.p ...

  5. java socket调用接口_Java中socket接口调用

    最近一个项目中接口通讯这一块主要是调用银联系统的socket接口,我方是客户端,即发送请求接收返回报文的一方.在贴代码之前,还是要了解一下关于socket的基础知识. Socket的基本概念 1.建立 ...

  6. java socket资源释放_java基础--socket

    (1) 一.网络:将不同区域的计算机连接到一起 局域网 城域网 互联网 二.地址:IP地址 确定网络上 一个绝对地址 |位置 --->房子的地址 三.端口号: 区分计算机软件的 -->房子 ...

  7. java判断时间是不是星期五_Java判断当前日期是星期几

    参考链接地址:http://blog.csdn.net/a9529lty/article/details/3206942 /** * 判断当前日期是星期几 * @param pTime 修要判断的时间 ...

  8. java socket超时时间_java中socket 默认超时时间 | 学步园

    MS:永远吧 Java代码 connect publicvoidconnect(SocketAddress endpoint, inttimeout) throwsIOException Connec ...

  9. java socket 读取文件_Java中Socket下载一个文本文件

    package com.lanqiao.demo2; import java.io.BufferedInputStream; import java.io.FileInputStream; impor ...

最新文章

  1. 1.3MB的超轻YOLO算法!全平台通用,准确率接近YOLOv3,速度快上45%丨开源
  2. 给出中后或者前中遍历,确定一个二叉树
  3. BCH零确认和比特币RBF该怎么选?
  4. 小巧密码破解工具IE PassView使用指南
  5. java 多线程池_Java项目中,线程池中线程数量太大会有什么影响?
  6. 聊一聊Jmeter与多接口测试
  7. Apache Camel教程– EIP,路由,组件,测试和其他概念的简介
  8. c语言cis,c语言小白学习历程第五篇
  9. ServicePointManager.ServerCertificateValidationCallback 冲突的解决
  10. real-time RGB-D camera relocalization
  11. Win8 Style App 播放Smooth Streaming
  12. CREO:CREO软件之零件【编辑】之修饰、用户定义特征的简介及其使用方法(图文教程)之详细攻略
  13. html中怎样把背景图片置顶,HTML5中背景图片如何设置
  14. PAT-2021年春季乙级考试题解
  15. 王道——数据结构 第一章 思维拓展
  16. SXT:聚合与组合的理解
  17. 治愈系好声线:唱见散搭
  18. discuz mysql 配置_Discuz如何修改数据库配置?
  19. Basic Authorization 认证方法
  20. maven shade 插件的小插曲

热门文章

  1. 对话框弹出的位置引发的问题showdialog
  2. JavaEye站长对OpenSocial与Facebook平台的比较
  3. 在linux下面实现检测按键(Linux中kbhit()函数的实现)
  4. STM32线缆综合测试系统
  5. java.lang.VerifyError: Expecting a stack map frame
  6. java实现豆瓣回帖机器人
  7. 15天学习MVC后的小结(分享经历与想法)
  8. PHP分页类的实现,返回结果未渲染,更容易在HTML中使用
  9. NBA球队球员介绍1
  10. 自定义日期输入控件-解决需要用户输入日期的麻烦控制