自己写的socket 多线程 通讯
来源:互联网 发布:竹解心虚,然后知不足 编辑:程序博客网 时间:2024/06/14 06:51
1 SocketClient.java 代码
package com.cpcnet.socket;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import com.cpcnet.util.MyLogger;import com.cpcnet.util.PropertiesUtil;import com.cpcnet.util.StringUtil;public class SocketClient {private MyLogger logger = new MyLogger(SocketClient.class);public static String CMD=PropertiesUtil.getProp("socket.properties", "CMD"); private Socket socket = null; private BufferedReader br = null; private PrintWriter pw = null; public String getTheFiles(String cmd,List<String> gidList){ this.logger.info("SocketClient.java getTheFiles(String cmd,List<String> gidList) cmd = " + cmd + " gidList = " + gidList); boolean flag = true; String result = null; String ip = PropertiesUtil.getProp("socket.properties", "ip"); int port = Integer.parseInt(PropertiesUtil.getProp("socket.properties", "port")); if(!this.connect(ip, port)){ this.logger.error("SocketClient.java connect falied"); flag = false; }else{ this.logger.info("SocketClient.java connect success"); this.logger.info("SocketClient.java connect Socket = " + socket); System.out.println("Socket=" + socket); try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); } catch (IOException e) {flag = false;this.logger.error("SocketClient.java br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); ");e.printStackTrace();} if(!this.sendCmd(cmd, gidList)){ flag = false; this.logger.error("SocketClient.java sendCmd(cmd, gidList) failed "); } if(flag){ result = this.getMessage(); System.out.println("SocketClient.java result = " + result); } } this.close(); return result; } public String getMessage(){ String result = null; String str = null;try {str = br.readLine();System.out.println("server message = "+str); result = str;Thread.sleep(1);} catch (Exception e) {this.logger.error("SocketClient.java getMessage() error");e.printStackTrace();} pw.flush(); return result; } public boolean sendCmd(String cmd,List<String> gidList){ boolean flag = true; if(CMD.equals(cmd)&&gidList.size() > 0){ String gidListString = StringUtil.ListToString(gidList);// String gidListString = StringUtil.gidStringConvertList(gidStr) String sendCmd = cmd + "and" + gidListString ; pw.println(sendCmd); pw.flush(); }else{ this.logger.error("SocketClient.java sendCmd(String cmd,List<String> gidList) cmd = " + cmd + " gidList = " + gidList); flag = false; } return flag; } public boolean connect(String ip ,int port){ boolean flag = true; try {socket = new Socket(ip, port);} catch (IOException e) {flag = false;e.printStackTrace();} return flag; } public void close(){ try {br.close();pw.close(); socket.close(); } catch (IOException e) {// TODO Auto-generated catch blockthis.logger.error("SocketClient.java close() error");e.printStackTrace();} } public static void main(String[] args) { String cmd = PropertiesUtil.getProp("socket.properties", "CMD");// List<String> gidList = new ArrayList<String>();// gidList.add("20186");// gidList.add("40435");// gidList.add("40699");// new SocketClient().getTheFiles(cmd, gidList); // // try {//Thread.sleep(5000);//} catch (InterruptedException e) {//// TODO Auto-generated catch block//e.printStackTrace();//}// List<String> gidList2 = new ArrayList<String>(); gidList2.add("19934"); gidList2.add("40435"); gidList2.add("40699"); new SocketClient().getTheFiles(cmd, gidList2);// {20186=[all_sites_traffic_summary_201502.html, all_sites_traffic_summary_201503.html], 40435=[], 40699=[]} } }
2 SocketServer.java 代码
package com.cpcnet.socket;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.cpcnet.util.ListUtil;import com.cpcnet.util.MyLogger;import com.cpcnet.util.PropertiesUtil;public class SocketServer {private ServerSocket serverSocket = null;private Socket socket = null;private BufferedReader br = null;private PrintWriter pw = null;private MyLogger logger = new MyLogger(SocketServer.class);private String CMD=PropertiesUtil.getProp("socket.properties", "CMD");private String cmd = null;private String gidListString = null;private String error = PropertiesUtil.getProp("socket.properties", "error");public boolean init(){boolean flag = true;int port = Integer.parseInt(PropertiesUtil.getProp("socket.properties", "port"));//设定服务端的端口号 try {serverSocket = new ServerSocket(port);} catch (IOException e) {this.logger.error("SocketServer.java serverSocket = new ServerSocket(PORT); port = " + port);flag = false;e.printStackTrace();} System.out.println("ServerSocket Start:"+serverSocket); return flag;}public boolean start(){boolean flag = true;if(!this.init()){ this.logger.error("SocketServer.java init() failed ");}else{while(true){ try {socket = serverSocket.accept();System.out.println("Connection accept socket:" + socket);Thread thread = this.initThread(socket, logger);thread.start();//thread.stop();} catch (IOException e) {this.logger.error("SocketServer.java start() init the br and pw error");try {socket.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}e.printStackTrace();return false;} }}return flag;}public Thread initThread( final Socket socket, final MyLogger logger){Thread thread = new Thread(new Runnable(){public void run(){try { //用于接收客户端发来的请求 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法 pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); } catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// while(true){ if(!this.getMessage()){ logger.error("SocketServer.java getMessage() failed " ); } if(!this.sendMessage()){ logger.error("SocketServer.java sendMessage() failed"); } try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("close socket and socket = " + socket);// this.close(); // }} public void close(){ try {br.close();pw.close();socket.close();//serverSocket.close();} catch (IOException e) {logger.error("SocketServer.java close() error");e.printStackTrace();} }public boolean getMessage(){boolean flag = true;String cmdAndGidListAndMonth = null;try {cmdAndGidListAndMonth = br.readLine();} catch (IOException e) {logger.error("SocketServer.java getMessage() error");e.printStackTrace();return false;} if(cmdAndGidListAndMonth != null){System.out.println("SocketServer.java cmdAndGidListAndMonth = " + cmdAndGidListAndMonth);cmd = cmdAndGidListAndMonth.split("and")[0];gidListString = cmdAndGidListAndMonth.split("and")[1];}return flag;}public boolean sendMessage(){boolean flag = true;if (CMD.equals(cmd)) {String fileBasicPath = PropertiesUtil.getProp("socket.properties", "fileBasicPath");Map<String,List<String>> map_gid_list = new HashMap<String,List<String>>();List gidList = ListUtil.StringToList(gidListString);if(gidList!= null && gidList.size() > 0){for(int i = 0 ; i < gidList.size() ; i ++ ){String filePath = fileBasicPath + gidList.get(i);List<String> gid_list = this.getFilesByGid(filePath);map_gid_list.put((String) gidList.get(i), gid_list);}System.out.println("map_gid_list.toString() = " + map_gid_list.toString());pw.println(map_gid_list.toString());pw.flush(); }else{flag =false;logger.error("SocketServer.java sendMessage error : this.cmd = " + cmd + " this.gidList = " + gidList );} }return flag;}public List<String> getFilesByGid(String filePath){List<String> list = new ArrayList<String>();File sumamryGidFile = new File(filePath);if(!sumamryGidFile.exists()) sumamryGidFile.mkdir();File[] childFiles = sumamryGidFile.listFiles();if(childFiles != null &&childFiles.length > 0){ for(int j = 0 ; j < childFiles.length ; j ++){ if(!childFiles[j].isDirectory()){String childFileName = childFiles[j].getName();childFileName = childFileName.split("\\.")[0];childFileName = childFileName.split("_")[4];list.add(childFileName); } } }return list;} });return thread;} public static void main(String[] agrs) { boolean flag = new SocketServer().start(); } }
0 0
- 自己写的socket 多线程 通讯
- 自己封装的多线程通讯类
- python socket 多线程通讯
- java socket多线程通讯
- 多线程Socket通讯复习
- 自己写的socket通信代码
- socket多线程并发异步通讯
- java socket多线程通讯demo
- 自己实现的socket多线程通信
- VC中写socket通讯的基本流程
- VC中写socket通讯的基本流程
- 推荐一下自己写的通讯调试软件
- 自己写的异步多线程队列
- 多线程复制自己写
- delphi的socket通讯
- delphi的socket通讯
- 简单的Socket通讯
- 简单的socket通讯
- Java NIO系列教程(一) Java NIO 概述
- 第四周项目:指向学生类的指针
- LINUX 使用top 查看动态进程
- 【hadoop】 4001-Partitioner编程
- 【操作系统】——PV操作
- 自己写的socket 多线程 通讯
- 倒排索引构建算法BSBI和SPIMI
- Spring入门4--Resource
- 一百张票三个窗口同时卖的Runnable接口实现例子。
- 基础练习 查找整数
- Xcode6键盘不出现处理方法
- 命令行输入文件名,源代码计数器
- 【hadoop】 4002-Combiner组件
- 树状数组学习心得