1. socket client(客户端)
对接第三方公司需要向其推送消息,用到tcp通信,他们那边是服务端(server),将我们这边的客户端方法代码粘出来。
public static String SocketClient(String str) {
String info="";
try {
// System.out.println("TCP开始---------------------");
//创建Socket对象
Socket socket=new Socket("ip",端口);
//根据输入输出流和服务端连接
//获取一个输出流,向服务端发送信息
OutputStream outputStream=socket.getOutputStream();
//将输出流包装成打印流
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.print(str);
printWriter.flush();
//关闭输出流
socket.shutdownOutput();
//获取一个输入流,接收服务端的信息
InputStream inputStream=socket.getInputStream();
//包装成字符流,提高效率
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
//缓冲区
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
//临时变量
String temp=null;
while((temp=bufferedReader.readLine())!=null){
info+=temp;
// System.out.println("客户端接收服务端发送信息:"+info);
}
//关闭相对应的资源
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println("TCP结束---------------------"+info);
return info;
}
- 对方要调试,提出来要推送的时候每隔一秒钟推送一次,要是用MVC的定时任务太麻烦,而且是调试完不使用。搜了个线程的方式,粘出来。以后跟其他三方公司对接时,这种不合理的要求不要去帮他们搞,费时费力,还得等对面调好在注释掉
Runnable doWork = new Runnable() {
@Override
public void run() {
//调用上面socket方法
//SocketUtil.SocketClient(jsonNew);
}
};
// // import java.util.concurrent.*;
final ScheduledExecutorService scheduler = newScheduledThreadPool(1);
final ScheduledFuture<?> doWorkHandle;
doWorkHandle = scheduler.scheduleAtFixedRate(doWork, 0, 1, TimeUnit.MINUTES);
ps:tomcat里面运行的时候里面有线程,用 sh shutdown.sh 是关不掉的,要用kill命令。
参考,类似的博客,原来的那个找不到了,代码是复制的