java Socket完美实例。。。(转)
转 http://hi.baidu.com/bieluanchi/blog/item/6991f01daa193efbe0fe0ba4.html
java socekt 同步套节字编程主要用到java.net.Socket类,通常情况下我们需要socket的长连接模式。其次就是在连接的另一端断开之后需要及时响应。
对于连接的判断,socket提供的isClosed,isConnected等都是判断本地套节字的状态。要判断运程的连接,可以通过发送紧急数据来判断,紧急数据发送成功与否,就表示远程是否断开。
package org.noka.nsocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* socket 长连接类
* @author rebin
* @version 1.0
* @object noka tag
* @web http://www.97521.com
*/
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(0);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信
return false;
}catch(Exception se){
return true;
}
}
/**
* 测试
* @param ags
*/
public static void main(String[] ags){
Nksocket nksocket = new Nksocket("127.0.0.1",8089);
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波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java Socket编程是网络编程的基础,它允许两个应用之间建立连接并进行双向通信。在这个特定的案例中,我们探讨的是如何通过Socket在Java中传递JavaBean对象。JavaBean是一种符合特定规范的Java类,通常用于封装数据...
《Java综合经典实例大全》是Java编程学习的重要资源,它包含了一系列丰富且具有代表性的实例,旨在帮助开发者深入理解和熟练运用Java语言。本资源主要针对Java编程初学者和有一定经验的开发者,通过实际操作和实践,...
"164个JAVA完美源程序"这个压缩包显然包含了多个经过精心设计和优化的Java程序,旨在提供学习、参考和实践的资源。这些源程序可能涵盖了Java的基础到高级特性的应用,包括但不限于面向对象编程、数据结构、算法、...
【Java编程语言基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle收购)于...164个JAVA完美程序可能包含了这些方面的实践示例,通过学习和分析这些程序,可以进一步提升Java编程技能。
"164个Java完美程序"这个压缩包文件很可能包含了一系列精心设计、功能完善的Java代码示例,旨在帮助学习者理解和掌握Java编程的核心概念和技术。下面,我们将对Java编程的一些关键知识点进行详细的阐述。 1. **基础...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java 完美笔记 - 北京邮电大学 Java 是一种广泛使用的高级编程语言,应用于 Android 应用开发、Web 开发、企业软件开发等领域。本笔记是北京邮电大学的一份 Java 笔记,涵盖了 Java 语言的基础知识、语法、面向对象...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 ...
Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 ...
8. **网络编程**:Java提供了丰富的Socket类和ServerSocket类用于网络通信,支持TCP/IP和UDP协议,可构建网络应用程序。 9. **泛型**:泛型引入了类型参数,提高了代码的类型安全性和重用性,避免了强制类型转换的...
4. **网络编程**:书中详细讲解了Java在网络编程方面的应用,包括Socket通信、URL和URLConnection的使用,以及如何处理HTTP请求和响应。 5. **多线程处理**:Java的并发特性使得多线程编程变得简单,书中详细阐述了...
7. **网络编程**:Java的Socket编程允许开发网络应用,源码可能包含客户端和服务器端的实现,例如TCP连接、UDP广播等。 8. **sound java**:这可能涉及到Java的音频处理,如使用Java Sound API播放、录制和处理音频...
本资料"Socket.zip"包含了一个Android Socket通信的完美示例,对于理解并掌握Socket编程有极大的帮助。下面我们将深入探讨Android中Java Socket的相关知识点。 1. **Socket基础概念**:Socket,又称套接字,是网络...
这个系统可能并不完美,但作为学习和理解网络编程基础的一个实例,它具有一定的参考价值。下面将详细讲解这个系统涉及到的主要知识点。 首先,Java是这个聊天系统的编程语言,它以其跨平台的特性而闻名,使得开发的...
Java编程是计算机科学领域中最广泛使用的编程语言之一,尤其在企业级应用开发中占据着核心地位。...这些实例是理论学习和实践经验的完美结合,对于任何想要深入Java编程的人来说,都是不可多得的宝贵资源。