Socket Thread java 代码
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class DTSClientTread extends Thread{
//客户端的socket
private Socket socket;
/** 设备PC服务字主机地址 */
private String host;
/** 远程套接字开放端口 */
private int port;
/** A、B线选择判断的前缀 */
private String pre;
private final int connectTimeout = 10000;
private static DTSClientTread client = null;
//获取客户端线程唯一对象
public static DTSClientTread getInstance(String host,int port,String pre) {
if (client == null) {
client = new DTSClientTread( host, port,pre);
}
return client;
}
//构造方法,设置host和port
public DTSClientTread(String host,int port,String pre){
super(pre + ".DTSClient(" + host + ":" + port + ")");
setHost( host);
setPort( port);
setPre( pre);
start();
}
//线程主体方法
@Override
public void run(){
debug("run()","client socket "+socket);
while (true) {
try
{
if (null != socket) {
try {//发送检测是否断开
socket.sendUrgentData(0xFF);
} catch (Exception e) {//断开产生异常,关闭对象
socket.close();
socket = null;
debug("run","socket检测是否断开产生异常,关闭对象 异常:"+e);
}
}else {
//debug("run"," 重新连接中... 连接IP:"+getHost()+" 连接Port:"+getPort());
socket=connect(getHost(), getPort());//获取通讯连接
}
if (socket != null){
handleMessage(socket.getInputStream());//获取通讯消息,并处理
}
} catch (Exception e) {
try {
//debug("run", " 连接失败,继续连接\n");
Thread.sleep(connectTimeout);
} catch (InterruptedException e1) {
debug("run","socket 异常:"+e1);
break;
}
}
}
}
/**
* 监听通信内容
*
*/
public void handleMessage(InputStream inputStream){
try{
int length=0;
byte[] bytes=new byte[1024];
while ((length=inputStream.read(bytes))!=-1) {
debug("handleMessage",new String(bytes,0,length));
String kwbh = getKwbh(new String(bytes,0,length));
if(kwbh!=null){//火灾报警通知
// 处理业务代码 ;
/*ObjectFromServlet ofs = RemoteAccesser.commitRequest(Catalog.YEWU_SCGL,813,kwbh);
if (!ofs.isSuccess())
{
debug("Fire ", kwbh + "火灾报警通知出错 "+ ofs.getReturnedValue());
}*/
//2017-9-20 jzx 增加连接在应用服务器上的USB接口报警器发送警报消息
alarm(kwbh + "上报火情");
//debug("Fire ", "火灾报警通知 "+kwbh);
}else{
//debug(Fire,"库位编号不能为空!");
}
}
//debug("handleMessage","closing the server socket!");
}catch(SocketTimeoutException ex){
//
}
catch(Throwable e){
debug("handleMessage","异常:"+e);
}
}
public Socket connect(String host,int port){
InetAddress addr;
try{
addr = InetAddress.getByName(host);
socket = new Socket(addr,port);
socket.setSoTimeout(5 * 60 * 1000);
debug("connect","SOCKET 连接成功! ");
}
catch(IOException e){
//debug("connect","SOCKET 连接出错 "+ e);
}
return socket;
}
public String getHost()
{
return this.host;
}
public void setHost(String host)
{
this.host = host;
}
public int getPort()
{
return this.port;
}
public void setPort(int port)
{
this.port = port;
}
public String getPre()
{
return this.pre;
}
public void setPre(String pre)
{
this.pre = pre;
}
public String getKwbh(String dtsAddr){
if(dtsAddr==null||dtsAddr.length()<10){
return null;
}
if(!pre.equals(dtsAddr.substring(0, 1))){
return null;
}
dtsAddr = pre
+dtsAddr.substring(2, 4)
+dtsAddr.substring(5, 7)
+dtsAddr.substring(8, 10);
return dtsAddr;
}
private static void debug(String method, String msg)
{
System.out.println(
new java.sql.Time(System.currentTimeMillis())
+ "\tDTSClientTread\t" + method + "\t" + msg);
}
/*public static void main(String[] args)
{
alarm("test");
}*/
public static void alarm(String msg)
{
/*SocketComm sc = new SocketComm("127.0.0.1:8081");
String ret = sc.outputMessage("K " + msg + "\r");
debug("alarm", "发报警信息 " + msg + " 返回 " + ret);
sc.close();*/
}
public static void stopAlarm()
{
/*SocketComm sc = new SocketComm("127.0.0.1:8081");
String ret = sc.outputMessage("G " + "WCS消音" + "\r");
debug("stopAlarm", "关报警返回 " + ret);
sc.close();*/
}
}