socket通讯相互发送读取xml实例

2023-11-09

首先了解下socket通讯传输数据的特点:数据在网络传输时使用的都是字节流或字符流,Socket也不例外,所以我们发送数据的时候需要转换为字节发送,读取的时候也是以字节为单位读取。

那么问题就在于socket通讯时,接收方并不知道此次数据有多长,因此无法精确地创建一个缓冲区(字节数组)用来接收,在不定长通讯中,通常使用的方式时每次默认读取8*1024长度的字节,若输入流中仍有数据,则再次读取,一直到输入流没有数据为止。但是如果发送数据过大时,发送方会对数据进行分包发送,这种情况下或导致接收方判断错误,误以为数据传输完成,因而接收不全。
所以,大部分情况下,双方使用socket通讯时都会约定一个定长头放在传输数据的最前端,用以标识数据体的长度,通常定长头有整型int,短整型short,字符串Strinng三种形式。

下面小编介绍两个socket+xml传输的实例,案例一,是使用writeUTF()和readUTF()方法,发送和读取传输的数据。

案例2是组装好xml后,计算xml的字节长度,放在报文头,使用write()方法发送数据,read()方法读取数据。

这里再介绍在writeUTF()和write()方法的区别:

writeUTF(String str);   
write(int b) ;   

可以看出二者的参数不一样,writeUTF可以直接将组装的字符串发送过去(方法封装,改方法内部也是应该需要转成字节或字符传输的),但是接受方也必须使用readUTF方法读取接受,要保持一样。wirte方法则是属于相对第一级的封装,需要将组装的xml字符串转成字节数组传输。此外, ASCII码:一个英文字母等于一个字节; UTF-8编码:一个英文字母等于一个字节; Unicode编码:一个英文字母等于两个字节。因为不同的编码格式对字节的统计也有区别,所以在计算xml字节长度的时候,是要规定好传输的编码格式,这些在下面的代码中都要体现,请读者自行体会。

案例一 服务端:

package tcpSocket;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
 
public class TCPServer2 {
	public static void main(String args[]) {
			int serverPort = 7896;
			ServerSocket listenSocket ;
			Socket clientSocket ;
			try {
//				******************接收读取客户端传来的内容******************************************
					listenSocket = new ServerSocket(serverPort);
				    clientSocket = listenSocket.accept();
				    DataInputStream in = new DataInputStream(clientSocket.getInputStream());
					String data = in.readUTF();
//					System.out.println("接收到的数据:" + data);
					DOM(data);
					
//					******************向客户端写xml文件******************************************
					DataOutputStream out=new DataOutputStream(clientSocket.getOutputStream());
					// 定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
					DocumentBuilderFactory factory = DocumentBuilderFactory
							.newInstance();
					// 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
					DocumentBuilder builder = factory.newDocumentBuilder();
					// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问
					Document document = builder.newDocument();
					//组织生产xml文件内容
					Element root = document.createElement("persons");
					document.appendChild(root);
					Element person = document.createElement("person");
					Element name = document.createElement("name");
					name.appendChild(document.createTextNode("java小强"));
					person.appendChild(name);
					Element sex = document.createElement("sex");
					sex.appendChild(document.createTextNode("man"));
					person.appendChild(sex);
					Element age = document.createElement("age");
					age.appendChild(document.createTextNode("99"));
					person.appendChild(age);
					root.appendChild(person);
	
					TransformerFactory tf = TransformerFactory.newInstance();
					// 此抽象类的实例能够将源树转换为结果树
					Transformer transformer;
					transformer = tf.newTransformer();
	
					DOMSource source = new DOMSource(document);
					ByteArrayOutputStream bos = new ByteArrayOutputStream();
					transformer.transform(source, new StreamResult(bos));
					String xmlStr = bos.toString();
					out.writeUTF(xmlStr);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	
	public static void DOM(String data) {
		try {
			//遍历xml获取内容
			byte[] b = data.getBytes();
			InputStream inp = new ByteArrayInputStream(b);
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.parse(inp);
			NodeList nl = doc.getElementsByTagName("persons");
//			System.out.println(nl.getLength());
			for (int i = 0; i < nl.getLength(); i++) {
				System.out.println("person:  "
						+ doc.getElementsByTagName("person").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("name:  "
						+ doc.getElementsByTagName("name").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("sex:  "
						+ doc.getElementsByTagName("sex").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("age:  "
						+ doc.getElementsByTagName("age").item(i)
								.getFirstChild().getNodeValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

客户端:

package tcpSocket;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
 
public class TCPClient {
 
	public static void main(String[] args) throws Exception {
		// 2017年12月29日 下午1:43:11
		Socket soc = null;
		String data = "";
		InetAddress addr = InetAddress.getByName("127.0.0.1");
		int serverPort = 7896;
		if (addr.isReachable(5000)) {
			try {
				soc = new Socket(addr, serverPort);
				
//************************向客户端写xml文件******************************************
				DataOutputStream out=new DataOutputStream(soc.getOutputStream());
				// 定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
				DocumentBuilderFactory factory = DocumentBuilderFactory
						.newInstance();
				// 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
				DocumentBuilder builder = factory.newDocumentBuilder();
				// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问
				Document document = builder.newDocument();
				//组织生产xml文件内容
				Element root = document.createElement("persons");
				document.appendChild(root);
				Element person = document.createElement("person");
				Element name = document.createElement("name");
				name.appendChild(document.createTextNode("java小强"));
				person.appendChild(name);
				Element sex = document.createElement("sex");
				sex.appendChild(document.createTextNode("man"));
				person.appendChild(sex);
				Element age = document.createElement("age");
				age.appendChild(document.createTextNode("99"));
				person.appendChild(age);
				root.appendChild(person);
 
				TransformerFactory tf = TransformerFactory.newInstance();
				// 此抽象类的实例能够将源树转换为结果树
				Transformer transformer;
				transformer = tf.newTransformer();
 
				DOMSource source = new DOMSource(document);
				ByteArrayOutputStream bos = new ByteArrayOutputStream();
				transformer.transform(source, new StreamResult(bos));
				String xmlStr = bos.toString();
				out.writeUTF(xmlStr);
				
//********************************接收读取客户端传来的内容******************************************
				//接收来自服务器的数据,并解析打印
				DataInputStream in = new DataInputStream(soc.getInputStream());
				data = in.readUTF();
//				System.out.println("接收到的数据:" + data);
				DOM(data);
			} catch (UnknownHostException e) {
				System.out.println("Socket Error:" + e.getMessage());
			} catch (EOFException e) {
				System.out.println("EOF:" + e.getMessage());
			} catch (IOException e) {
				System.out.println("IO:" + e.getMessage());
			} finally {
				if (soc != null)
					try {
						soc.close();
					} catch (IOException e) {/* close failed */
					}
			}
		} else {
			System.out.println("FAILURE - ping " + addr
					+ " with no interface specified");
		}
	}
 
	public static void DOM(String data) {
		try {
			byte[] b = data.getBytes();
			InputStream inp = new ByteArrayInputStream(b);
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.parse(inp);
			NodeList nl = doc.getElementsByTagName("persons");
//			System.out.println(nl.getLength());
			for (int i = 0; i < nl.getLength(); i++) {
				System.out.println("person:  "
						+ doc.getElementsByTagName("person").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("name:  "
						+ doc.getElementsByTagName("name").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("sex:  "
						+ doc.getElementsByTagName("sex").item(i)
								.getFirstChild().getNodeValue());
				System.out.println("age:  "
						+ doc.getElementsByTagName("age").item(i)
								.getFirstChild().getNodeValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

用到的jar包可见:http://download.csdn.net/download/csdnliuxin123524/10180445

案例二,

客户端,

package socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;
 
import org.apache.commons.lang.StringUtils;
public class CallExtPboc {
	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {
		Socket soc = null;
		String data = "";
		InetAddress addr = InetAddress.getByName("127.0.0.1");
		int serverPort = 7896;
		soc = new Socket(addr, serverPort);
		DataOutputStream out=new DataOutputStream(soc.getOutputStream());
		String xmlReq = builderReqXml();
		byte[] b = xmlReq.getBytes("UTF-8");
		long len=b.length;
		String length=String.format("%06d",len);
		 xmlReq = length+xmlReq;
		byte[] bt = xmlReq.getBytes("utf-8");
		 out.write(bt);
//		out.writeUTF(builderReqXml());
		//接收来自服务器的字节类型数据,并解析打印
		//DataInputStream in = new DataInputStream(soc.getInputStream());
		//byte[] buf =new byte[1024];
		//int readb=in.read(buf);
		//System.out.println("**************************************");
		//if(readb != -1){
		//	System.out.println(new String(buf,0,readb));
		//}
		//in.close();
	}
	
	private static String builderReqXml(){
		StringBuffer xmlReq = new StringBuffer();
//		xmlReq.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		xmlReq.append("<SERVICE xmlns=\"http://www.sss.com/dataspec/\">");
		//构造SERVICE_HEADER节点里面的数据
		StringBuilder serviceHeader = new StringBuilder();
		serviceHeader.append(getNode("SERVICE_SN","198234712374-17412748"));
		serviceHeader.append(getNode("SERVICE_ID","12100"));//交易码
		serviceHeader.append(getNode("ORG","org1"));
		serviceHeader.append(getNode("CHANNEL_ID","01"));//服务渠道编号----请求渠道
		serviceHeader.append(getNode("OP_ID","tt"));
		serviceHeader.append(getNode("REQUST_TIME","20050621123000"));
		serviceHeader.append(getNode("VERSION_ID","01"));
		serviceHeader.append("<MAC/>");
		//将SERVICE_HEADER节点数据加入报文中
		xmlReq.append(getNode("SERVICE_HEADER", serviceHeader.toString()));
		
		//构造SERVICE_BODY节点里面的数据
		StringBuilder serviceBody = new StringBuilder();
		//构造extAttributes节点的数据
		StringBuffer extAttributes =new StringBuffer();
		//构造auth节点数据
		StringBuffer auth =new StringBuffer();
		auth.append(getNode("Q_PIN", "0123456789ABCDEF"));
		//将auth节点加入到EXT_ATTRIBUTES中
		extAttributes.append(getNode("AUTH", auth.toString()));
		//将extAttributes节点加入到SERVICE_BODY中
		serviceBody.append(getNode("EXT_ATTRIBUTES", extAttributes.toString()));
		//构造REQUEST节点里面的数据
		StringBuilder request = new StringBuilder();
		request.append(getNode("SYS_ID","aps"));
		request.append(getNode("OPERATOR_ID", "tt"));
		request.append(getNode("ID_NO", "123"));
		request.append(getNode("ID_TYPE", "I"));
		request.append(getNode("NAME", "czy"));
		//将REQUEST节点数据加入至SERVICE_BODY中
		serviceBody.append(getNode("REQUEST", request.toString()));
		//将SERVICE_BODY节点数据加入至报文中EXT_ATTRIBUTES
		xmlReq.append(getNode("SERVICE_BODY", serviceBody.toString()));
		xmlReq.append("</SERVICE>");
		System.out.println(xmlReq);
		return xmlReq.toString();
	}
	
	/**
	 * 根据节点名称以及节点内容,返回节点字符串
	 * @param nodeName 节点名称
	 * @param nodeValue 节点内容
	 * @return	构造出的节点字符串
	 */
	private static String getNode(String nodeName,String nodeValue){
		StringBuilder node = new StringBuilder();
		if(!StringUtils.isEmpty(nodeName)){
			node.append("<"+nodeName+">");
			if(!StringUtils.isEmpty(nodeValue)){
				node.append(nodeValue);
			}
			node.append("</"+nodeName+">");
		}
		return node.toString();
	}
}

这里的xml数据也可以不使用dom4j组装,直接使用字符串拼接如下:客户端

package test.s;
 
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
 
public class CallApsService {
	private Socket s;
	private DataOutputStream out;
 
	public CallApsService() throws IOException {
	}
 
	public static void main(String[] args) throws Exception {
		CallApsService c = new CallApsService();
		int i = 0;
		Map<String, String> infoMap = initInput();
		for(Entry<String, String> enty: infoMap.entrySet()){
			i++;
			c.talk(enty.getKey(),enty.getValue(),i);
			System.out.println("发送信息完毕!");
		}
	}
 
	// 发送对象
	// ObjectOutputStream oos;
	// TransferObj obj;
	public void sendMessage(Socket s,String idNo,String name,int i) {
		try {
 
			// socket传字符串
			out = new DataOutputStream(s.getOutputStream());
			//批次号申请
			String xmlReq = "<SERVICE xmlns=\"http://www.asss.com/dataspec/\"><SERVICE_HEADER><SERVICE_SN>198234712374-17412748</SERVICE_SN><SERVICE_ID>12100</SERVICE_ID><ORG>org1</ORG><CHANNEL_ID>01</CHANNEL_ID><OP_ID>tt</OP_ID><REQUST_TIME>20050621123000</REQUST_TIME><VERSION_ID>01</VERSION_ID><MAC/></SERVICE_HEADER><SERVICE_BODY><EXT_ATTRIBUTES><AUTH><Q_PIN>0123456789ABCDEF</Q_PIN></AUTH></EXT_ATTRIBUTES><REQUEST><SYS_ID>aps</SYS_ID><OPERATOR_ID>tt</OPERATOR_ID><ID_NO>123</ID_NO><ID_TYPE>I</ID_TYPE><NAME>czy</NAME></REQUEST></SERVICE_BODY></SERVICE>";
			
			
			String lenthEncode = "UTF-8";
			long len = xmlReq.getBytes(lenthEncode).length;
			String length=String.format("%06d",len);
			xmlReq = length+ xmlReq;
			byte[] bt = xmlReq.getBytes(lenthEncode);
			out.write(bt);
 
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
 
	public void talk(String idNo,String name,int i) throws Exception {
		try {
			// 发送对象
			s = new Socket("127.0.0.1", 7896);
			System.out.println("客户端:发送信息");
			sendMessage(s,idNo,name, i);
			System.out.println("发送信息完毕!");
			// 发字符串
//			 receiveMessage(s);
			out.close();
			// in.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (s != null)
					s.close(); // 断开连接
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public static Map<String, String> initInput(){
		
		Map<String, String> infoMap = new HashMap<String, String>();
		infoMap.put("140106198506020369","湘一百二");
		
		return infoMap;
	}
	
	
}

服务器

package socket;
 
import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class CallExtPbocServer {
 
	public static void main(String[] args) {
		int serverPort = 7896;
		ServerSocket listenSocket ;
		Socket clientSocket ;
		try {
//			******************接收读取客户端传来的内容******************************************
				listenSocket = new ServerSocket(serverPort);
			    clientSocket = listenSocket.accept();
			    DataInputStream in = new DataInputStream(clientSocket.getInputStream());
			    byte[] buf=new byte[1024];
			    int tag=in.read(buf);
			    if(tag!=-1){
			    	System.out.println(new String(buf,0,tag));
			    }
			    in.close();
		}catch(Exception e){
			
		}
		
	}
 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket通讯相互发送读取xml实例 的相关文章

  • linux进程间通信---本地socket套接字(二)---多进程实现一个server对应多个client

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 想要获取完整源码的 关注公众号后回复 socket2 即
  • Java实战项目(一)---编写聊天室程序

    刚开始学java 参考 java从入门到精通 这本书 学到网络程序设计基础这一章节 尤其与其他计算机进行通信 觉得还挺有意思的 所有深入地试试做一个小程序 聊天室程序 在代码中加入我自己的理解和困惑 希望能和大家一起探讨 每行的代码基本都有
  • Python2.7网络通信socket和串口通信serial多线程同时实现

    Python2 7下多线程网络通信socket和串口通信serial同时进行 最近在写网络通信TCP IP读取数据和串口通信读取发送数据 之前写了单线程的然后这次尝试多线程实现 当然我是写的网络通信的服务端 话不多说贴上代码 coding
  • Java学习笔记之“比较字符串”

    本文为在How2j的学习总结 只代表个人见解 如有不妥 望指出以便更正 问题描述 创建一个长度是1000的字符串数组 使用长度是2的随机字符填充该字符串数组 统计这个字符串数组里重复的字符串有多少种 注 需要去除重复次数大于2的情况 pac
  • 解决java.net.SocketException: No buffer space available (maximum connections reach

    严重 Catalina stop java net SocketException No buffer space available maximum connections reached JVM Bindat java net Plai
  • 使用socket判断http请求或http响应的传输结束

    使用socket判断http请求或http响应的传输结束 先把header直到 r n r n整个地收下来 1 传输完毕就关闭connection 即recv收到0个字节 2 有内容 if Transfer Encoding chunked
  • 网络编程——epoll

    参考 TCP IP网络编程 尹圣雨 epoll epoll也是Linux下实现I O复用的一种方法 其性能优于select 基于select的I O复用服务器的设计缺陷 调用select函数后 针对所有文件描述符的循环语句 调用select
  • 网络层(四)

    网络层 我们说过 网络层主要讲的就是ip编址和路由选择算法 更准确的说 应该是网际IP协议 网际IP协议主要说明了各个主机和服务器的ip编址规则 了解IP编址前 我们需要知道IP数据报 IP数据报在网络层中传输 我们看一下IP数据报的结构
  • 推荐七种开源免费的C/C++网络库

    1 ACE 庞大 复杂 适合大型项目 开源 免费 不依赖第三方库 支持跨平台 2 Asio Asio基于Boost开发的异步IO库 封装了Socket 简化基于socket程序的开发 开源 免费 支持跨平台 3 POCO POCO C Li
  • 基于TCP的socket通信

    本文转载自http blog csdn net chocolate001 article details 6612201 基于TCP 面向连接 的socket编程 分为客户端和服务器端 客户端的流程如下 1 创建套接字 socket 2 向
  • java-使用newTaskFor封装任务中非标准取消

    1 使用newTaskFor钩子函数来改进用来封装非标准取消的方法 这是ThreadPoolExecutor的新特性 2 当提交一个callable给ExecutorService时 submit返回一个Future 可以用Future来取
  • 几种获取本机IPv6地址的方法

    如同获取IPv4的地址一般 获取IPv6也是可以通过使用网卡信息来得到IPv6的地址 也可以给一个多播地址发送数据包然后获取IPv6的地址 在IPv4通过iotcl函数是可以获取本主机的IPv4的地址的 但是本楼主使用iotcl函数来获取I
  • 【小练习】windows与linux进行socket文件传输

    在Windows与Linux使用socket通信基础上 添加文件传输功能 需要进行简单的交互 目录 程序效果 实现流程 样例代码 测试用例 参考资料 程序效果 Windows客户端可以从Linux服务器端索要文件 也可以发送文件至Linux
  • Java NIO 的前生今世 之二 NIO Channel 小结

    Java NIO Channel 通常来说 所有的 NIO 的 I O 操作都是从 Channel 开始的 一个 channel 类似于一个 stream java Stream 和 NIO Channel 对比 我们可以在同一个 Chan
  • java Socket 简单实现客户端与服务器间通信(仿聊天室)

    java Socket TCP协议简单实现客户端与服务器间的通信 打赏 执行效果 启动服务器和3个客户端 进行群聊和私聊 执行过程 服务端 首先创建服务器套接字ServerSocket对象并绑定端口 启动服务器 然后ServerSocket
  • 解决前端websocket数据帧接收数据大小限制(数据分帧)问题

    websocket前后台出现问题解决方法 一开始通过限制后台返回数据帧以125字节分隔分段数据返回给前台 但调试时发现只要加上其他的一些信息返回json string很容易就会超过了125字节 于是在后台修改了这个限制大小为2048 但是这
  • socket连接超时问题

    一部分 把CSDN与中文yahoo翻了底朝天 也没找到如何设置socket的连接超时的满意方法 问此问题的兄弟已有一大堆 这里偶就讲一下win下如何设置socket的connect超时 设置connect的超时很简单 CSDN上也有人提到过
  • 多线程2(同步代码块+同步方法+同步锁+死锁)

    一 多线程同步 多线程的并发执行可以提高程序的效率 但是当多个线程去访问同一个资源时 有时也会引发一些安全性问题 例如 统计一个班上的学生人数时 学生有进有出会影响最终学生人数 为了解决这样的问题 需要实现多线程的同步 即限制某个资源在同一
  • UDP服务recvfrom函数设置非阻塞

    基本概念 其实UDP的非阻塞也可以理解成和TCP是一样的 都是通过socket的属性去做 方法一 通过fcntl函数将套接字设置为非阻塞模式 方法二 通过套接字选项SO RECVTIMEO设置超时 方法一源码 编译 g udp server
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX

随机推荐

  • F - Ginger的GIAO

    F Ginger的GIAO SDUT OnlineJudge include
  • GDB调试动态库

    转载 https blog csdn net huluedeai article details 52225923 一 方法 gdb如何调试动态链接库的问题 比如我想调试的代码为动态链接库代码 我设置断点后却得到以下错误 gdb b mps
  • 你从未见过的python重点知识总结,最全面没有之一。过了这村就没这店了。

    强烈建议收藏再慢慢看 Py2 VS Py3 Py2 和 Py3 的差别 print 成为了函数 python2 是关键字 不再有 unicode 对象 默认 str 就是 unicode python3 除号返回浮点数 没有了long类型
  • 波士顿房价预测(终版讲解)

    代码段分四个部分 库的引入 加载数据 函数 配置网络结构 类 运行部分 获取数据 创建网络 启动训练 作图 我的是基础版 库只用到了numpy和matplotlib的pyplto两个 加载数据需要进行将数据作为数组输入 重整成14 N的二维
  • Mybatis PageHelper(MyBatis 分页插件 )的使用

    概述 如果你也在用 MyBatis 建议尝试该分页插件 这一定是最方便使用的分页插件 分页插件支持任何复杂的单表 多表分页 我们在项目中使用sql的手动分页太常见了 如果前台需要分页信息的话 一般我们是需要2条slq语句 一条是查询总页数c
  • leetcode刷题-代码训练营-第3章-哈希表

    目录 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和 454 四数相加II 383 赎金信 1 暴力解法 2 哈希表解法 15 三数之和 1 哈希解法 2 双指针法 18 四数之和 242 有效的字母异位词
  • Java 微服务框架选型(Dubbo 和 Spring Cloud?)

    微服务 Microservices 是一种架构风格 一个大型复杂软件应用由一个或多个微服务组成 系统中的各个微服务可被独立部署 各个微服务之间是松耦合的 每个微服务仅关注于完成一件任务并很好地完成该任务 在所有情况下 每个任务代表着一个小的
  • 【常见错误】FPGA器件DDR类型选择错误

    ZedBoard开发常见错误 DDR的型号配置错误 间接会导致的结果是 在调试debug时 会发现cpu一直处于running的状态 但是在控制台并不能看到打印的信息 并且不管是只用了PS端或者是PS PL端都用了 都不能在控制台上出现打印
  • 短信验证码

    短信验证码用的是阿里云的 目录结构如下 其中aliyunsdkdysmsapi是在官方下载的 https help aliyun com document detail 55359 html aliyun py coding utf 8 i
  • 注入技术--LSP劫持注入

    1 原理 简单来说 LSP就是一个dll程序 应用程序通过winsock2进行网络通信时 会调用ws2 32 dll的导出函数 如connect accept等 而后端通过LSP实现这些函数的底层 简单来说就是调用winsock2提供的函数
  • 硬件系统工程师宝典(13)-----PCB的布局“有讲究”

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到EMC的标准以及提高EMC性能的一些常用方法 今天我们来看看PCB上模块的布局有什么讲究 模块划分及布局 PCB上模块的划分和布局会影响到布
  • Linux  root密码忘记了,怎么办?

    Linux root用户密码忘记了 怎么办 一 清除密码 首先 启动Linux 出现这个画面 有的版本不一定 和这个 一样但是大同小异 注意这句话就行 Press any key to enter the menu 按任意键进入菜单 然后
  • Cocos2d-x Js Binding 的手动绑定实现

    http www ityran com archives 4902 Cocos2d x Js Binding 的手动绑定实现 一叶 cocos2d x 08 13 2304 4条评论 随着 Cocos2d x 的发展 Cocos2d htm
  • Command ‘roscore‘ not found, but can be installed with: sudo apt install python-roslaunch

    ubuntu18 04安装ros melodic时报错 解决方法 查看是否安装包 cd opt ros melodic bin ls 发现没有roscore 安装 在bin目录 sudo apt get install ros melodi
  • NGINX指定启动的配置文件

    若不指定安装路径 nginx默认安装在 usr local nginx路径下 若不指定nginx的配置文件 nginx默认启动找的是同级nginx更路径下的 conf nginx conf配置文件 但该配置文件的所在路径 以及文件名不是绝对
  • git revert后无法merge发生的惨案

    git revert后无法merge发生的惨案 前景描述 目前公司开发模式是这样的 有测试分支test 开发分支dev1 dev2 dev3 dev1 dev2 dev3都是基于test分支拉出来的 各分支如果没有问题后都会合并到test
  • c# postgresql帮助类

    1 安装Npgsql 2 代码
  • 判断Java中map键值对中是否包含一个key

    boolean b map containsKey menuId
  • 前端拼音首字母搜索姓名

    前言 实际工作中碰到一个业务场景 只需要输入姓名字母简称就可以直接匹配出相应的汉字 这样可以极大的方便用户检索 提升用户的使用体验 具体需求 在搜索框中根据拼音首字母来快速搜索出人名 例如曾琴琴 曾是多音字 可以通过输入 z c zq cq
  • socket通讯相互发送读取xml实例

    首先了解下socket通讯传输数据的特点 数据在网络传输时使用的都是字节流或字符流 Socket也不例外 所以我们发送数据的时候需要转换为字节发送 读取的时候也是以字节为单位读取 那么问题就在于socket通讯时 接收方并不知道此次数据有多