Socket Thread java 代码

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();*/
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Socket编程是使用Java语言进行网络通信的过程,包括建立连接、传输数据和关闭连接等操作。Java提供了java.net.Socketjava.net.ServerSocket两个类来支持Socket编程。 下面是一个简单的Java Socket服务器端代码的示例: ```java package lzx8; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.UUID; public class TcpServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8081); while(true){ new Thread(() -> { try { Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JavaSocket编程](https://blog.csdn.net/m0_55755339/article/details/131611124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Java Socket 编程详解](https://blog.csdn.net/BASK2311/article/details/130599513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值