socket连接方式服务端

package com.yinxin.jtyh.controller;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.SocketException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.yinxin.jtyh.entity.GjjPersonInfoEntity;
import com.yinxin.jtyh.service.PersonInfoService;
import com.yinxin.jtyh.tools.SpringUtil;

public class ServerConfig extends Thread{
	
	private Socket socket;
	
	private static final Log LOG = LogFactory.getLog(ServerConfig.class);
	
	public ServerConfig(Socket socket) {
		this.socket = socket;
	}

	private PersonInfoService gjj = SpringUtil.getBean(PersonInfoService.class);
	
	private String hanle(InputStream stream) {
		byte[] bytes = new byte[1024];
		int len = 0;
		try {
			len = stream.read(bytes);
		} catch (IOException e) {
			LOG.error("连接超时: " + e.getMessage());
		}
		GjjPersonInfoEntity gjjEntity  = null;
		if(len != -1) {
			String req = null;
			try {
				req = new String(bytes,0,len,"UTF-8");
				LOG.info("<--------------------------------------接收到的请求信息: " + req);
			} catch (UnsupportedEncodingException e) {
				LOG.error("请求信息转换为字符串出错: " + e.getMessage());
			}
			// 提取入参中的必要字段作为查询条件
			String[] reqs = req.replace("\"","").split("\\|");
			String IdNo = reqs[4].trim();
			String CusName = reqs[2];
			LOG.info("被查询人姓名和证件号码: " + CusName + ":" + IdNo);
			gjjEntity = gjj.selectPersonInfoByName(IdNo, CusName);
			if(gjjEntity == null) {
				return "查询结果为null";
			}
			
		}
		
		LOG.info("<----------------------------响应数据: " + gjjEntity.toString());
		
		return gjjEntity.toString();
	}
	
	@Override
	public void run() {
		BufferedWriter writer = null;
		
		try {
			socket.setSoTimeout(9000);
			LOG.info("银行端" + socket.getRemoteSocketAddress() + "机连接成功------------------------------------------->");
			
			InputStream input = socket.getInputStream();
			writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
			String result = null;
			
			try {
				result = hanle(input);
				writer.write(result);
				writer.newLine();
				writer.flush();
			}catch(Exception e) {
				writer.newLine();
				writer.flush();
				
				LOG.info("输出数据时出错: " + e.getMessage());
				
			}
			
			
		} catch (SocketException e) {
			LOG.error("连接超时异常: " + e.getMessage());
		} catch (IOException e) {
			LOG.error("获取输入信息流异常: " + e.getMessage());
		}finally {
			try {
				writer.close();
			}catch(Exception e) {
				LOG.error("输出流关闭异常: " + e.getMessage());
			}
		}
	}
	
}

package com.yinxin.jtyh.controller;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.websocket.server.ServerEndpoint;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component

public class BCMRunner implements CommandLineRunner{
	
	// 端口
	@Value("${socket.port}")
	private Integer port;
	//核心线程数
	@Value("${socket.poolCore}")
	private Integer poolCore;
	// 最大连接数
	@Value("${socket.poolMax}")
	private Integer poolMax;
	// 保持线程数
	@Value("${socket.poolKeep}")
	private Integer poolKeep;
	// 队列容量
	@Value("${socket.poolQueueInit}")
	private Integer poolQueueInit;
	
	

	@Override
	public void run(String... args) throws Exception {
		
		ServerSocket server = null;
		Socket socket = null;
		server = new ServerSocket(port);
		
		System.out.println("设备服务器已经开启,监听端口: " + port);
		
		ThreadPoolExecutor pool = new ThreadPoolExecutor(poolCore, poolMax, poolKeep, TimeUnit.SECONDS, 
				new ArrayBlockingQueue<>(poolQueueInit),new ThreadPoolExecutor.DiscardOldestPolicy());
		
		while(true){
			socket = server.accept();
			pool.execute(new ServerConfig(socket));
			
		}
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值