- 浏览: 583892 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (174)
- JBPM (3)
- WWF (0)
- JavaScript (11)
- J2EE (40)
- OperationSystem (11)
- 数据库 (12)
- CSS (1)
- Ajax (2)
- J2SE (30)
- Tools (10)
- 服务器中间件 (3)
- 异常 (0)
- Flex (5)
- jQuery (11)
- html (9)
- Ejb (1)
- HTML5 Shiv–让该死的IE系列支持HTML5吧 (1)
- Spring (9)
- Quartz (3)
- log4j (1)
- maven (1)
- cpdetector (1)
- JSON (1)
- log4jdbc (1)
- asm (8)
- FusionCharts (1)
- jqplot (1)
- highcharts (1)
- excanvas (1)
- html5 (1)
- jpcap介绍 (1)
- weblogic (3)
- URLURLClassLoader (0)
- URLClassLoader (1)
- ant (2)
- ivy (2)
- nexus (1)
- IT (0)
- LoadRunner (1)
- SCSS (1)
- ruby (1)
- webstorm (1)
- typescript (1)
- Jboss7 (1)
- wildfly (1)
- oracle (5)
- esb (0)
- dubbo (2)
- zookeeper (3)
- eclipse (1)
- Android (2)
- Studio (1)
- Google (1)
- 微信 (1)
- 企业号 (1)
- Linux (13)
- Oracle12c (1)
- Hadoop (1)
- InletexEMC (1)
- Windows (1)
- Netty (3)
- Marshalling (2)
- Protobuf (1)
- gcc (1)
- Git (1)
- GitLab (1)
- shell (2)
- java (3)
- Spring4 (1)
- hibernate4 (1)
- postgresql (1)
- ApacheServer (2)
- Tomcat (2)
- ApacheHttpServer (2)
- realvnc (1)
- redhat (7)
- vncviewer (1)
- LVS (4)
- LVS-DR (1)
- RedHat6.5 (5)
- LVS-NAT (1)
- LVS-IPTUNNEL (2)
- LVS-TUN (1)
- keepalived (2)
- yum (1)
- iso (1)
- VMware (1)
- redhat5 (1)
- ha (1)
- nginx (2)
- proguard (1)
- Mat (1)
- DTFJ (1)
- axis2 (1)
- web service (1)
- centos (1)
- random (1)
- urandom (1)
- apache (1)
- IBM (1)
- cve (1)
- 漏洞 (1)
- JDBC (1)
- DataSource (1)
- jdk (1)
- tuxedo (2)
- wtc (1)
最新评论
-
skying007:
好资料,谢谢分享给啊
FusionCharts在服务器端导出图片(J2EE版) -
cgnnzg:
大神好 可以发一份源码给我学习么 多谢了 978241085 ...
springmvc+dubbo+zookeeper -
jifengjianhao:
求源码:854606899@qq.com
springmvc+dubbo+zookeeper -
wdloyeu:
shihuan8@163.com邮箱网盘在哪,没找到。能给份源 ...
Java Socket长连接示例代码 -
huangshangyuanji:
求代码:45613032@qq.com
springmvc+dubbo+zookeeper
SocketClient.java文件:
ClientDto.java文件:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringReader; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; /** * 请求的XML:<?xml version="1.0" encoding="gb2312" ?> * <request type="add/delete/query"> * <resource class="if" resid="172.19.128.12 FastEthernet3/7" ne="172.19.128.12"/> * </request> * 送回的XML:<?xml version="1.0" encoding="gb2312" ?> * <respond type ="add/delete/query"> * <resource class="if" resid="172.19.128.12 FastEthernet3/7" ne="172.19.128.12"/> * <result value="0/-1/-2/-21/-22/-23"/> * </respond> * * */ public class SocketClient extends Thread { private static final Logger logger = Logger.getLogger(SocketClient.class); /** * 生成请求XML文档 * */ private Document createXML(){ Document document = DocumentHelper.createDocument(); Element requestElement = document.addElement("request"); //加一行注释 // requestElement.addComment("请求xml格式的信息"); requestElement.addAttribute("type", "add"); Element resourceElement = requestElement.addElement("resource"); resourceElement.addAttribute("class", "if"); resourceElement.addAttribute("resid", "'172.19.128.12 FastEthernet3/7"); resourceElement.addAttribute("ne", "172.19.128.12"); return document; } /** * 修改XML文档 * */ private String updateXML(String xmlString){ String xml = ""; SAXReader reader = new SAXReader(); try { Document doc = reader.read( new StringReader(xmlString.trim())); List list = doc.selectNodes("/request"); Iterator it = list.iterator(); while(it.hasNext()){ Element requestElement = (Element)it.next(); requestElement.setName("respond"); //修改根节点名字 Element resultElement = requestElement.addElement("result"); //增加一个子节点 resultElement.addAttribute("value", "-22"); } xml = doc.asXML(); } catch (DocumentException e) { e.printStackTrace(); } return xml; } private List<ClientDto> parseXML(String xml){ List<ClientDto> list = new ArrayList<ClientDto>(); ClientDto cdDto = new ClientDto(); SAXReader saxReader = new SAXReader(); Document document = null; try { // document = DocumentHelper.parseText(xml); document = saxReader.read(new ByteArrayInputStream(xml.getBytes())); // Element xmlInfo = document.getRootElement(); // String rootnode = xmlInfo.getName(); // String roottype = xmlInfo.attributeValue("type"); Iterator dociter = document.nodeIterator(); for (Iterator iterator = dociter; iterator.hasNext();) { Node node = (Node) iterator.next(); Element nodeInfo = node.getParent(); String nodeName = nodeInfo.getName(); if(nodeName.equals("request")){ cdDto.setRootType(nodeInfo.attributeValue("type")); } if(nodeName.equals("resource")){ cdDto.setClassType(nodeInfo.attributeValue("class")); cdDto.setResid(nodeInfo.attributeValue("resid")); cdDto.setNe(nodeInfo.attributeValue("ne")); } list.add(cdDto); } } catch (DocumentException e) { e.printStackTrace(); } return list; } /** * 发送请求XML格式的信息 * */ private void sendXML(Socket socket_client, Document document){ OutputStream os = null; try { os = new BufferedOutputStream(socket_client.getOutputStream()); String xmlStr = document.asXML().trim(); byte[] information = getInformation(xmlStr); os.write(information); os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 连接telnet后输入的验证字符串 * */ private void connectedStr(Socket socket_client, String inStr){ PrintWriter pw = null; try { pw = new PrintWriter(socket_client.getOutputStream()); // pw.println(inStr); pw.write(inStr); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 将int型的数据类型转换成byte[]类型 * * @param n * @return */ private static byte[] getIntToByte(int n) { byte[] V_byte = new byte[4]; V_byte[0] = (byte) (n & 0xff); V_byte[1] = (byte) (n >> 8 & 0xff); V_byte[2] = (byte) (n >> 16 & 0xff); V_byte[3] = (byte) (n >> 24 & 0xff); return V_byte; } public static int getByteToInt(byte[] b){ int result = b[3] & 0xff; result = (result << 8) + (b[2] & 0xff); result = (result << 8) + (b[1] & 0xff); result = (result << 8) + (b[0] & 0xff); return result; } /** * 将String类型的XML转换成byte数组 * */ private byte[] getInformation(String xml){ byte[] alarm = xml.getBytes(); byte[] length = getIntToByte(alarm.length); int infoLength = 4 + alarm.length; byte[] information = new byte[infoLength]; for (int i = 0; i < information.length; i++) { if (i < 4) { information[i] = length[i]; } else { information[i] = alarm[i - 4]; } } return information; } /** * 读取由Server端送回来的XML数据 * */ private String receiveInfo(Socket socket_client){ InputStream is = null; String xml = ""; try { is = new BufferedInputStream(socket_client.getInputStream()); byte [] head = new byte[4]; is.read(head ,0,4); int bodyLength = getByteToInt(head); if(bodyLength == 0) return null; byte[] body = new byte[1024]; is.read(body, 0, bodyLength); xml = new String(body, 0, bodyLength).trim(); logger.info("#### 请求XML = "+xml); if(xml.charAt( xml.length()-1)!='>'){ logger.debug("#### 错误格式的xml文件"); new IOException("xml文件的最后的字符不是 '>' "); } } catch (IOException e) { e.printStackTrace(); } return xml; } /** * @param args */ public static void main(String[] args) { SocketClient sc = new SocketClient(); Socket socket = null; String inStr = ""; //输入验证字符串内容 if(args.length >0){ inStr = StringUtils.trim(args[0]); }else{ inStr = "start"; } try { socket = new Socket("221.3.44.133", 7780); //Telnet连到到远程服务端 sc.connectedStr(socket, inStr); //输入验证字符串 Document document = sc.createXML(); //生成XML文档 sc.sendXML(socket, document); //发送XML文档 Thread.sleep(30 * 60 * 1000); //30分钟 String resultXML = sc.receiveInfo(socket); //接收XML文档 String updatedXML = sc.updateXML(resultXML); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
ClientDto.java文件:
import java.io.Serializable; public class ClientDto implements Serializable { private String rootType; private String classType; private String resid; private String ne; private String resultValue; public ClientDto() { } public String getRootType() { return rootType; } public void setRootType(String rootType) { this.rootType = rootType; } public String getClassType() { return classType; } public void setClassType(String classType) { this.classType = classType; } public String getResid() { return resid; } public void setResid(String resid) { this.resid = resid; } public String getNe() { return ne; } public void setNe(String ne) { this.ne = ne; } public String getResultValue() { return resultValue; } public void setResultValue(String resultValue) { this.resultValue = resultValue; } }
发表评论
-
JDK中的随机数机制探究
2017-05-31 21:25 1959今天有同事问起关于JDK1.8中默认是random问题 ... -
Netty5 AIO
2015-11-25 21:18 1694工程结构图: TimeServer.java文件内容如下: ... -
JDK1.7 AIO
2015-11-24 22:32 1065工程结构图: Helper.java文件内容如下: p ... -
java JAVA_OPTS javaagent
2015-11-23 15:48 1526附件里java JAVA_OPTS -javaagent的程序 ... -
dubbo源代码调试
2015-09-24 17:06 4217今天同事要调试zookeeper+dubbo源代码,所以做了以 ... -
any+ivy的使用
2014-11-29 16:25 2113javapro-用ivy编译版本.rar文件时示例代码。 i ... -
URLClassLoader初体验
2014-11-26 14:56 2210使用概要: File file = ... -
将输出流OutputStream转化为输入流InputStream的方法
2014-07-19 22:27 27687将输出流OutputStream转化为输入流InputSt ... -
JVM启动参数大全
2014-06-11 17:19 1008http://www.blogjava.net/midstr/ ... -
Java实现aop案例
2014-04-27 11:33 1364MyPersonService.java代码如下: pac ... -
Java Socket长连接示例代码
2014-04-07 13:42 21791SocketListenerPusher.java代码如下: ... -
Java多线程文档
2013-10-06 10:56 1237附件里是Java多线程的pdf文档,写的比较好,可参考。 ... -
利用jackson包进行json字符串与pojo类之间的转换源代码
2012-10-05 19:35 1977附件里是利用jackson包进行json字符串与pojo类之间 ... -
Java Swing开发的文件内容加密
2012-09-02 14:52 1231主要是javax.swing.JFrame和java.awt. ... -
mysql和Oracle在对clob和blob字段的处理
2012-08-25 18:50 30931一、MySQL与Oracle数据库如何处理Clob,Bl ... -
用JAVA Bean 反射得到set,get方法
2011-10-17 19:39 9104/** * java反射bean的get方法 ... -
Oracle自带连接池应用
2011-08-31 13:27 2070依赖ojdbc14.jar包 OraclePooled.ja ... -
利用commons-digester3-30.jar解析xml文件
2011-08-28 14:05 3981此方式解析需要commons-beanutils-1.8.3. ... -
非阻塞的HTTP服务器
2011-08-27 21:23 1354附件里为非阻塞HTTP服务器的相关Java代码。 HttpS ... -
Java.nio
2011-08-27 21:17 1419附件里为阻塞模式、非阻塞模式、阻塞和非阻塞的混合模式代码。 ...
相关推荐
1. **Socket服务端**:服务端是等待连接并处理来自客户端请求的程序。在C#中,我们首先创建一个Socket实例,然后绑定到特定的IP地址和端口号。接下来,调用`Listen()`方法开始监听客户端的连接请求。当有客户端连接...
本篇文章将深入探讨如何实现socket客户端的长连接,并解析XML文件。 首先,让我们了解一下Socket。Socket是计算机网络中进程间通信的一种端点,它提供了进程在网络中的双向通信接口。在客户端-服务器架构中,客户端...
- **接受(Accept)**:当有客户端连接请求时,使用`accept()`函数接收连接请求,返回一个新的Socket用于与客户端通信。 - **接收数据(Receive)**:使用`recv()`函数从客户端接收数据。 - **发送数据(Send)**...
本案例"Socket (含有客户端和服务器端 QQ实例)"旨在帮助开发者深入理解如何利用Socket进行网络应用程序的开发,尤其是对于创建类似QQ这样的即时通讯应用。 首先,我们来了解一下Socket的基本概念。Socket是操作系统...
本主题将深入探讨"C#异步SOCKET服务和客户端",这是一项用于实现实时信息传输的关键技术。 首先,理解SOCKET的基本概念至关重要。SOCKET是操作系统提供的一个接口,它允许应用程序通过网络进行通信。在C#中,System...
客户端程序(SocketClient)主要包括: 1. 创建Socket对象,指定服务器的IP地址和端口号。这里的IP地址应改为与服务端在同一局域网内的IP。 2. Socket的connect()方法用于发起连接请求。如果连接成功,也会得到输入...
Socket编程的基本原理是,服务器创建一个监听Socket,等待客户端的连接请求,一旦有请求到来,服务器就与客户端建立连接,然后通过这个连接交换数据。 在C++中,我们可以使用标准库中的`<sys/socket.h>`和`...
当有客户端连接时,会创建一个新的线程来处理这个连接,这样可以同时处理多个客户端请求。`ServerThread`类负责读取客户端发送的数据,打印出来,并将接收到的消息原样返回给客户端。 接着,我们看客户端的实现。...
在服务端,我们需要创建一个监听Socket,设置为非阻塞模式,然后通过accept()函数来接收客户端连接请求。由于无阻塞模式,accept()可能在没有新连接到来时立即返回,此时我们需要处理EWOULDBLOCK或EAGAIN这样的错误...
2. **并发与多线程**:为了提高程序的响应速度和处理能力,可以采用多线程的方式处理客户端请求。 3. **安全性和加密**:对于敏感数据的传输,应考虑使用SSL/TLS等加密协议确保数据的安全性。 4. **性能优化**:...
Socket分为两大类:服务器端Socket(Server Socket)和客户端Socket(Client Socket),它们分别对应于网络通信中的服务提供者和服务请求者。 1. 服务器端Socket: - **监听(Listen)**:服务器启动后,需要创建...
在描述中提到的“socket通信”,可能涉及到TCP或UDP协议,包括如何创建socket,绑定端口,监听连接,接受客户端请求,以及数据的发送和接收流程。 最后,`XML`(eXtensible Markup Language)是一种用于存储和传输...
在Linux环境下,使用C语言开发服务端和客户端程序是一项常见的任务,特别是在网络编程中。这里的项目要求客户端程序能够收集并发送其主机的CPU使用率、内存占用情况以及硬盘空间使用情况,而服务端则需要接收这些...
当收到客户端的连接请求时,accept()函数会被调用来接受连接,并为每个新连接创建一个新的Socket。 4. **客户端编程**:客户端首先需要创建Socket,然后调用connect()函数来尝试与服务器建立连接。连接成功后,就...
- GET请求:用于获取资源,Postman可以方便地构造GET请求,获取服务器上的数据。 - POST请求:通常用于向服务器发送数据,创建新的资源。在Postman中,用户可以填写请求体,设置Content-Type,如application/json...
在这个聊天程序中,服务器端通常会创建一个监听Socket,等待客户端的连接请求。当客户端发起连接时,服务器端接受连接并创建一个新的Socket与客户端进行通信。这个过程涉及到`ServerSocket`类的`accept()`方法。 ...
在这个"Socket聊天程序示例"中,我们探讨的是如何构建一个简单的网络聊天环境,其中每个终端都可以同时作为服务器和客户端进行交互。 首先,我们要了解Socket的基本概念。在TCP/IP协议栈中,Socket是应用层与传输层...
在Socket编程中,我们通常会创建一个ServerSocket来监听特定端口的连接请求,然后通过accept()方法接收客户端的Socket连接。与此同时,客户端通过Socket类建立到服务器的连接,并通过输入/输出流发送和接收数据。 ...
在IT领域,网络通信是应用程序之间进行数据交换的关键技术,而C#中的Socket编程则提供了实现这一功能的基础。本文将详细解析标题和描述中提到的"C# Socket客户端服务端封装,支持多连接处理,Tasks多线程,队列处理...
在本项目中,"C#使用SuperSocket实现自定义协议实现CS架构服务器和客户端程序设计"),开发者利用C#编程语言以及SuperSocket开源库构建了一套C/S(客户端/服务器)架构的应用。SuperSocket是一个轻量级、高度可扩展的...