socket判断连接状态,java测试socket接口
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
在窝类中有一个方法sendUrgentData,它会往输出流发送一个字节的数据,只要对方窝的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节(在爪哇中是抛出异常),而SO_OOBINLINE属性默认情况下就是关闭的。推荐:java视频教程
示例:
公共类Nksocket扩展线程{
公共字符串ip=null//连接服务器的互联网协议(互联网协议)
公共整数端口=null//连接服务器的端口
私有套接字socket=null//套节字对象
私有布尔close=false//关闭连接标志位,真的表示关闭,假的表示连接
私有整数sotimeout=1 * 1 * 10//超时时间,以毫秒为单位
//-
公共Nksocket(){
init();
}
公共Nksocket(字符串ip,整数端口){
setIp(IP);
设置端口(端口);
init();
}
/**
* 初始化窝对象
*/
public void init(){
尝试{
inet地址=inet地址。get by name(getIp());
socket=new Socket(address,get port());
插座。setkeepalive(true);//开启保持活动状态的套接字
插座。setsotimeout(sotime out);//设置超时时间
关闭=!发送(套接字, 2 );//发送初始数据,发送成功则表示已经连接上,发送失败表示已经断开
}catch(UnknownHostException e) {
e。printstacktrace();
}catch(IOException e){
e。printstacktrace();
}
}
/**
* 读数据线程
*/
公共无效运行(){
while(true){
//- 读数据-
close=isServerClose(套接字);//判断是否断开
如果(!关闭){//没有断开,开始读数据
string read text=读取文本(socket);
if(readtext!=null readtext.trim().长度()0){
System.out.println(读取数据:阅读正文);
}
}
//- 创建连接-
while(close){//已经断开,重新建立连接
尝试{
System.out.println(重新建立连接: getIp(): getPort());
inet地址=inet地址。get by name(getIp());
socket=new Socket(address,get port());
插座。setkeepalive(true);
插座。setsotimeout(sotime out);
关闭=!发送(套接字, 2 );
System.out.println(建立连接成功: getIp(): getPort());
}catch(异常se){
System.out.println(创建连接失败: getIp(): getPort());
关闭=真
}
}
}
}
/**
* 发送数据,发送失败返回假的,发送成功返回真实的
* @param csocket
* @param消息
* @返回
*/
公共布尔发送(套接字csocket,字符串消息){
尝试{
PrintWriter out=新的PrintWriter(套接字。获取输出流(),true);
out.println(消息);
返回真实的
}catch(异常se){
se。printstacktrace();
返回错误的
}
}
/**
* 读取数据,返回字符串类型
* @param csocket
* @返回
*/
公共字符串ReadText(Socket csocket){
尝试{
csocket。setsotimeout(sotime out);
InputStream输入=c套接字。getinputstream();
缓冲读取器in=新缓冲读取器(新输入流读取器(输入));
char[]sn=new char[1000];
英寸读(sn);
字符串sc=新字符串(sn);
返回sc;
}catch(IOException se){
返回空
}
}
/**
* 判断是否断开连接,断开返回没错,没有返回错误的
* @param套接字
* @返回
*/
public Boolean isServerClose(Socket Socket){
尝试{
插座。sendurgentdata(0x ff);//发送一个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信
返回错误的
}catch(异常se){
返回真实的
}
}
/**
* 测试
* @param ags
*/
公共静态void main(String[] ags){
NK插座NK插座=新NK插座( 127。0 .0 .1 ,8090);
NK插座。start();
}
//-
公共字符串getIp() {
回归IP;
}
public void setIp(字符串ip) {
this.ip=ip
}
公共整数getPort() {
返回端口;
}
public void setPort(整数端口){
this.port=port
}
}更多java知识请关注PHP中文网java基础教程板块。以上是java判断socket是否连接的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。