自己写的socket 多线程 通讯
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 blocke.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();}
}
自己写的socket 多线程 通讯相关推荐
- python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)
本文实例讲述了python socket多线程通讯方法.分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程 ...
- 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯
远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯, 对接多路plc串口WIFI模块实现远程调试程序.支持各种串口服务器以及tcp以太网转发器硬件.
- 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码,socket多线程并发通讯,对接多路plc串口WIFI模块实现远程调试程序
远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转服务器源代码,socket多线程并发通讯,对接多路plc串口WIFI模块实现远程调试程序. 支持各种串口服务器以及tcp以太网转发器硬件. ...
- python写机器人程序_用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- Netty入门与实战:仿写微信IM即时通讯系统
转载自:Netty入门与实战:仿写微信IM即时通讯系统 Netty是互联网中间件领域使用最广泛最核心的网络通信框架,几乎所有互联网中间件或者大数据领域均离不开Netty,掌握Netty是作为初中级工程 ...
- iOS Socket Client 通讯
iOS Socket Client 通讯 阅读 239 收藏 19 2017-03-29 原文链接:https://github.com/guangzhouxia/JTSocket iOS Socke ...
- Socket网络通讯_TCP协议
Socket网络通讯即如上图所示 图中IP代表服务器地址,那么端口是什么呢?
- socket多线程方式案例
记下来,方便以后查看 User类 1 package com.xujingyang.ThreadSocket; 2 3 import java.io.Serializable; 4 5 public ...
- C# Socket SSL通讯笔记
C# Socket SSL通讯笔记 一.x.509证书 1.制作证书 先进入到vs2005的命令行状态,即: 开始-->程序-->Microsoft Visual Studio 2005- ...
最新文章
- LunarPages空间500错误原因及解决办法
- dalvik对于JPDA的实现
- 开发整理笔记Markdown基本使用
- 4x root 红米_好激动,红米NOTE4X开发版成功获得完全ROOT教程,非假ROOT!!
- 博客“评论王”评选活动开始啦!
- linux pdf 编辑图层,PDF SDK DEMO
- 更新QQ连连看外挂 加入自动挂机多项功能
- 续费Enom域名的三种办法
- 2022年,人工智能和数据发展呈现哪五大趋势?
- 数值分析12 - Hermite埃尔米特插值法(要求高阶插值误差足够小)
- Scratch教程——完整的跳跃
- oracle查询sql走索引吗,Oracle SQL不走索引小记
- 2022-C4-AI-基于飞桨的智慧书桌系统
- LabVIEW编程实例:如何通过TCP协议进行数据通信
- ProcessDefinition是干这个用的
- Cadence创建异形焊盘教程(详细操作)
- react页面渲染之前_react 渲染顺序
- 廉江计算机等级考试学校最大,湛江一中、二中、北大附属实验学校和廉江实验学校成绩比较...
- 【Excel】引用人民银行同期贷款利率(基准利率)和LPR利率的利息计算器
- Keysight ADS常见报错及解决方法总结-1
热门文章
- 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期
- C++ STL栈Stack的使用
- 怎么break java8 stream的foreach
- 2016电大计算机网考,2016年电大-电大计算机网考题库[].doc
- ThreadLocal用法详解和原理
- maven下载包慢解决
- 04.内置analyzer和analyze-API使用
- 理解JS的事件循环过程
- python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
- exls导入数据库 php_PHP Excel导入数据到MySQL数据库