TCP socket编程,推送消息


 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;
    }
  1. 对方要调试,提出来要推送的时候每隔一秒钟推送一次,要是用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命令。
参考,类似的博客,原来的那个找不到了,代码是复制的

猜你喜欢

转载自blog.csdn.net/ZCCHZ/article/details/82848737