- 浏览: 99680 次
- 性别:
- 来自: 深圳
最新评论
-
weizaiC:
[flash=200,200][/flash]
ExtJS实现下拉列表级联 -
yanxunjian:
Java实现读取xml文件sql配置转换为JDBC SQL
...
Java实现读取xml文件sql配置转换为JDBC SQL -
road_16:
奶奶的,大妹子的
ExtJS实现下拉列表级联 -
road_16:
2.0版本的前台显示不了数据,3.0版本的才可以,检查了大半天 ...
ExtJS实现下拉列表级联 -
road_16:
怎么不说明extjs所使用的版本呢?版本不一样,写法也是不同的 ...
ExtJS实现下拉列表级联
TCP通信的一个模板
TCP的服务端用while一直接收客户端的发送的请求连接
在服务端接受到消息之后,客户端并不知道服务端的情况,还原样发回去,这里客户端接受到服务端得信息的是很才知道服务端已经接受到了客户端的发送的信息
这面是我的写的一个简单的TCP通信原理的例子
服务端
package com.lzb.common.socket; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * * 功能描述:TCP服务端 * * @author lizhenbin * * <p>修改历史:(修改人,修改时间,修改原因/内容)</p> */ public class TcpServer { public static boolean isRunning = true; private static TcpServer instance = null; public TcpServer() {}; public static synchronized TcpServer getInstance() { if(instance == null) instance = new TcpServer(); return instance; } /** * * 功能描述:TCP服务器初始化 * * @author lizhenbin * <p>创建日期 :2012-5-9 下午7:38:37</p> * * @param port * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public boolean server(String port) { if(port==null || port.equals("")) { System.out.println("Usage: TCP Server Port is Null."); return false; } ServerSocket ss = null; try { ss = new ServerSocket(Integer.valueOf(port)); while(isRunning) { Socket socket = ss.accept(); TcpServerTaskThread taskThread = new TcpServerTaskThread(socket); new Thread(taskThread).start(); } ss.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { ss.close(); } catch (Exception e) { e.printStackTrace(); return false; } } } public static void main(String[] args) { TcpServer tcp = TcpServer.getInstance(); tcp.server("3000"); } }
服务端的任务线程
/** * TcpServerTaskThread.java V1.0 2012-5-9 下午6:14:15 * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.lzb.common.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.concurrent.Callable; /** * * 功能描述:TCP服务端处理线程,接收到的任务数据,在传回去给客户端 * * @author lizhenbin * * <p>修改历史:(修改人,修改时间,修改原因/内容)</p> */ public class TcpServerTaskThread implements Runnable { private Socket socket = null; public TcpServerTaskThread(Socket socket) { this.socket = socket; } @Override public void run() { InputStream ins = null; BufferedReader buf = null; OutputStream outs = null; PrintWriter pw = null; try { while(true) { /** * TCP服务端程序接受客户端部分 */ ins = this.socket.getInputStream(); buf = new BufferedReader(new InputStreamReader(ins)); /** * 获取客户端发送的信息 */ String msg = buf.readLine(); if(msg==null) break; System.out.println("TCP Server Usage: " + msg); /** * TCP服务端向客户端发送接收到的消息 */ outs = socket.getOutputStream(); pw = new PrintWriter(outs, true); pw.println(msg); } } catch (IOException e) { e.printStackTrace(); } finally { try { buf.close(); ins.close(); pw.close(); outs.close(); } catch (IOException e) { e.printStackTrace(); } } } }
客户端的程序
/** * TcpCient.java V1.0 2012-5-9 下午6:57:51 * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.lzb.common.socket; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.concurrent.TimeUnit; import com.lzb.common.EntityChanageXmlJson; /** * * 功能描述:TCP客户端 * * @author lizhenbin * * <p>修改历史:(修改人,修改时间,修改原因/内容)</p> */ public class TcpClient { /** * * 功能描述:TCP客户端初始化 * * @author lizhenbin * <p>创建日期 :2012-5-9 下午7:41:18</p> * * @param msg * @param iphost * @param port * @return * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public boolean init(String msg, String iphost, String port) { if(msg==null || msg.equals("")) { System.out.println("Usage: TCP Client Send Message is Null."); return false; } if(iphost==null || iphost.equals("")) { System.out.println("Usage: TCP Client IP Host is Null."); return false; } if(port==null || port.equals("")) { System.out.println("Usage: TCP Client Listener Port is Null."); return false; } Socket socket = null; OutputStream outs = null; PrintWriter pw = null; InputStream ins = null; BufferedReader buf = null; try { socket = new Socket(iphost, Integer.valueOf(port)); /** * 向TCP服务端发送数据部分 */ outs = socket.getOutputStream(); pw = new PrintWriter(outs, true); pw.println(msg); /** * 接收TCP服务端反馈回来的消息 */ ins = socket.getInputStream(); buf = new BufferedReader(new InputStreamReader(ins)); System.out.println("TCP Client Usage: " + buf.readLine()); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { pw.close(); try { outs.close(); pw.close(); buf.close(); ins.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); return false; } } } }
<—————————————————— old version ————————————————————————>
最近离职,回家修养顺便考试,考试结束之后无聊时间写了一下TCP通信的简单例子。
实现TCP通信,首先建立服务断,我这里用到while循环,用于接受客户端的请求。
客户端程序:
/** * TcpServerThread.java V1.0 Apr 26, 2012 10:33:06 PM * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.tcp.server; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import com.tcp.vo.TcpVO; public class TcpServerThread implements Runnable { private Socket socket = null; public TcpServerThread() {}; public TcpServerThread(Socket socket) { this.socket = socket; } public void run() { try { // 接收到服务端发到的信息 InputStream ins = socket.getInputStream(); BufferedReader buf = new BufferedReader(new InputStreamReader(ins)); // 接收到数据后发送消息给客户端 OutputStream outs = socket.getOutputStream(); PrintWriter pw = new PrintWriter(outs, true); // 接收客户端发送的vo信息 ObjectInputStream ois = new ObjectInputStream(ins); // 发送反馈消息给客户端 ObjectOutputStream objOuts = new ObjectOutputStream(outs); boolean isRunning = true; while(isRunning) { TcpVO vo = new TcpVO(); vo = (TcpVO) ois.readObject(); System.out.println("Server------->Id: " + vo.getId()); System.out.println("Server------->Name: " + vo.getName()); System.out.println("Server------->Create Time: " + vo.getCtime()); // 发送反馈消息给客户端 objOuts.writeObject(vo); // // 在服务端输出客户端发过来的信息 // String clinetMsg = buf.readLine(); // System.out.println("Server---->Clinet Port: " + socket.getPort() + "----->Msg: " + clinetMsg); // // String revStr = (new StringBuffer(clinetMsg).reverse()).toString(); // // 服务端发送给客户端的信息 // pw.println("Client-------------->" + revStr); } pw.close(); outs.close(); buf.close(); ins.close(); ois.close(); objOuts.close(); } catch (Exception e) { //e.printStackTrace(); if(e instanceof NullPointerException) { System.out.println("---------->Port: " + socket.getPort() + " finished."); } } } }
启动服务端的程序:
/** * TcpServer.java V1.0 Apr 26, 2012 10:16:10 PM * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.tcp.server; import java.net.ServerSocket; import java.net.Socket; import com.tcp.util.BaseConfig; public class TcpServer extends BaseConfig { /* 开启服务端信息 */ private ServerSocket ServerSocket = null; private String ipAddress = null; private Integer port; /** * * 功能描述:创建服务端TCP * * @author lizhenbin * <p>创建日期 :Apr 26, 2012 11:42:25 PM</p> * * @throws Exception * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public void initSocket() throws Exception { // 验证参数 if(this.getConfigMap()==null) { System.out.println("Usage: Read Config Property is NULL."); return; } this.ipAddress = (String) this.getConfigMap().get("server.host"); if(this.ipAddress==null) { System.out.println("Usage: TCP IP Address is NULL."); return; } String portStr = (String) this.getConfigMap().get("server.port"); if(portStr==null) { System.out.println("Usage: TCP Port is NULL."); return; } this.port = Integer.valueOf(portStr); ServerSocket = new ServerSocket(this.port); Socket socket = null; boolean isRunning = true; while(isRunning) { socket = ServerSocket.accept(); TcpServerThread tcpServer = new TcpServerThread(socket); Thread thread = new Thread(tcpServer); thread.start(); } socket.close(); ServerSocket.close(); } /** * 功能描述:执行线程 * * @author lizhenbin * <p>创建日期 :Apr 26, 2012 10:16:17 PM</p> * * @param args * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public static void main(String[] args) { TcpServer tcpServer = new TcpServer(); try { tcpServer.initSocket(); } catch (Exception e) { e.printStackTrace(); } } }
客户端程序
/** * ClientServerThread.java V1.0 Apr 26, 2012 11:48:51 PM * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.tcp.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.tcp.vo.TcpVO; public class ClientServerThread implements Runnable { /* 开启服务端信息 */ private String ipAddress = null; private Integer port; private String pk; public ClientServerThread() { super(); } public ClientServerThread(String ipAddress, Integer port, String pk) { super(); this.ipAddress = ipAddress; this.port = port; this.pk = pk; } public void run() { int count = 0; try { Socket socket = new Socket(ipAddress, port); // 客户端发送数据给服务端 OutputStream outs = socket.getOutputStream(); PrintWriter pw = new PrintWriter(outs, true); // 接收服务器端返回的数据 InputStream ins = socket.getInputStream(); // 客户端发送VO ObjectOutputStream objOuts = new ObjectOutputStream(outs); // 接收客户端发送的vo信息 ObjectInputStream ois = new ObjectInputStream(ins); boolean isRunning = true; while(isRunning) { TcpVO vo = new TcpVO(); vo.setId(pk); vo.setName("李真斌(ch-zn), lizhenbin(en) " + count + " 次"); DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); vo.setCtime(df.parse(df.format(new Date()))); objOuts.writeObject(vo); Thread.sleep(1000); count++; // pw.println("-------->执行该客户端的当前线程: " + Thread.currentThread().getName() + " 执行: " + count + " 次"); // // // BufferedReader buf = new BufferedReader(new InputStreamReader(ins)); // String recvStr = buf.readLine(); // System.out.println("------->客户端接收到的返回信息: " + recvStr); TcpVO revVo = (TcpVO) ois.readObject(); System.out.println("Clinet------->Id: " + revVo.getId()); System.out.println("Clinet------->Name: " + revVo.getName()); System.out.println("Clinet------->Create Time: " + revVo.getCtime()); } pw.close(); outs.close(); socket.close(); ins.close(); ois.close(); } catch (Exception e) { e.printStackTrace(); } } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public String getPk() { return pk; } public void setPk(String pk) { this.pk = pk; } }
启动客户端程序
/** * ClientServer.java V1.0 Apr 26, 2012 11:47:42 PM * * Copyright Lizhenbin Co. ,Ltd. All rights reserved. * * Modification history(By Time Reason): * * Description: */ package com.tcp.client; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.tcp.util.BaseConfig; public class ClientServer extends BaseConfig { /* 开启服务端信息 */ private String ipAddress = null; private Integer port; public void initSocket() throws Exception { // 验证参数 if(this.getConfigMap()==null) { System.out.println("Usage: Read Config Property is NULL."); return; } this.ipAddress = (String) this.getConfigMap().get("server.host"); if(this.ipAddress==null) { System.out.println("Usage: TCP IP Address is NULL."); return; } String portStr = (String) this.getConfigMap().get("server.port"); if(portStr==null) { System.out.println("Usage: TCP Port is NULL."); return; } this.port = Integer.valueOf(portStr); ExecutorService exec = Executors.newSingleThreadExecutor(); //for(int i=0; i<5; i++) { ClientServerThread clientServerThread = new ClientServerThread(ipAddress, port, this.getPk()); exec.execute(clientServerThread); //} exec.shutdown(); } /** * 功能描述: * * @author lizhenbin * <p>创建日期 :Apr 26, 2012 11:47:42 PM</p> * * @param args * * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p> */ public static void main(String[] args) { ClientServer clientServer = new ClientServer(); try { clientServer.initSocket(); } catch (Exception e) { e.printStackTrace(); } } }
这样就可以实现TCP之间通信了
- TCP.rar (17.7 KB)
- 下载次数: 5
发表评论
-
poi创建Excel设计
2013-11-18 22:32 768电商商务,目前为止,做网站后台管理系统对到处数 ... -
程序员改变命运之程序,500W来了,信不信由你,每天JAVAC编译一下,JAVA一下500W就来了
2012-08-20 18:43 63胡乱写了一个随机数“双色球”程序,都是随机数,500W你信就有 ... -
JAVA读写文件基本方法
2012-08-20 09:30 869JAVA读写文件的基本方法,Reader 类是 J ... -
Java实现读取xml文件sql配置转换为JDBC SQL
2012-06-26 18:46 2437公司的框架都是用原生的JDBC框架,其中操作数据很 ... -
主键字符串自增Java实现
2012-06-09 17:41 5544程序实现字符串主键自增,例如:“SN000001” ... -
将Java字符串数组转化成对应的Entity
2012-06-06 09:14 3745最近新工作的 ... -
将简单的POJO转化为JSON或者XML
2012-05-10 18:04 1935利用反射机制获取类的信息,然后将所得的信息,转化成JSON数据 ... -
UDP通信
2012-05-10 17:54 913UDP通信,发送端发送数据,接受端接收数据,发送端发送数据不需 ... -
Java遍历、删除Map
2012-05-10 17:42 3495面试的时候,遇到一个很尴尬的事情,就是面试官问怎么 ... -
Java使用JXL创建Excel文件
2012-05-10 17:24 1908以前写过用jxl读取excel的,但是一直没有写 ... -
Java创建xml与排序
2012-05-05 19:53 2707DOM创建xml package com.lzb.model ... -
Java多线程
2012-05-05 19:49 786一个很有意思的题目,网上看到的,自己写了一下 题目的大概意思 ... -
Java的反射机制
2012-05-06 20:20 894Java的反射机制可以理解成,Java类Class ... -
Java实现IP地址定位地址信息
2012-03-14 11:06 11305做电子商务网站的时候,网站的头部一般都有显示是哪个 ... -
Java文件操作
2012-02-07 16:34 850在工作中,经常要获取到文件所在的路径和创建文件夹,这里补充一下 ... -
MD5类使用
2012-01-12 11:13 1015对用户注册的密码加密类,采用MD5算法,留着以后用 注意,B ... -
验证码生成
2012-01-12 10:19 900系统登陆或者注册的时 ... -
Java取时间的一个类
2012-01-09 14:43 1142整理了一下自己开发过程中经常使用到的一个时间类,当做工具类使用 ... -
jdbc连接池
2011-12-30 16:49 875自己整理的一个JDBC驱动,方便以后离开框架直接测试,在mys ... -
Java创建文件和文件路径
2011-12-30 16:30 1854最近在开发过程中,经 ...
相关推荐
delphi 2010版 采用的TTCPServer 和TTCPClient控件编写的TCP通信实例,客户端和服务端可以相互发送信息并测量通信时间。TChart控件动态显示时间曲线。 主要知识点:1.多线程的使用和线程安全之临界区保护 2.TCP通信...
C#对三菱和西门子,欧姆龙等支持...2)支持ModBusTcp通信读写操作 3)支持ModBusRtu串口通信读写操作 4)支持ModBusAscii串口通信读写操作 5)支持ModbusRtuOverTcp通信读写操作 6)请放心下载,多个项目已经在使用;
C#TCP通信,通过IP地址,TCP协议实现了数据的发送与接收,并且实现了文件的传输。
基于C#开放式TCP通信建立与西门子PLC的socket通信示例
LabVIEW实现TCP通信(一点对多点通讯),一个服务器发送波形数据,两个客户端接收数据并绘制波形图。 项目可直接运行~
C#,winform,Tcp通信源码 使用TcpListener和TcpClient 源码 Tcp通信源码TcpListener和TcpClient 源码
S7-1500 PLC之间进行TCP通信的具体方法和步骤详解
Labview与西门子1200 plc TCP通信源码
C#写的TCP通信程序,有客户端和服务端,WinForm界面
基于mfc的tcp通信程序,适合初学者,其中用到了异步套接字,服务器端口9000
资源名:C# 和西门子S7200 Smart S7TCP 通信实例源码 资源类型:程序源代码 源码说明: ① S7TCPDLL,此库支持西门子S7 TCP协议,支持S7-200 smart,1200,300,400,1500 PLC等产品 ② 此库由C#开发,支持VB.NET,C#.NET...
通过T-DIAG指令对S7通信或TCP通信进行连接状态诊断的具体方法示例
基于java的modbus TCP通信
C#TCP 通信(TCP发送16进制)
tcp通信Qt源码,客户端和服务器融合,可发文件和可发消息,
S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例
C#实现在VS下两台PC机间的TCP通信,采用Windows窗体应用,UI界面接收信息和使用按钮操作。 包含服务器和客户端,运用多线程进行TCP通信,操作简单,适合初学者学习TCP本机间局域网下的通信。
PLC MODBUS TCP 通信,能和西门子施耐德PLC通信
有在TCP通信的基础下,数据的发送和获取,还要报表生成和邮件发送功能,以及WIFI的AT指令设置命令。
基于S7-400 PN-H 冗余系统CPU集成PN口的Modbus TCP通信快速入门zip,2010年3月西门子Indusdry Solution IT部门更新了基于S7-300/400系统CPU的集成PN口的Modbus/TCP的最新版本软件选项包“MobusTCP PN-CPU V2.4”,本文...