系统运维系列 之网络编程/数据采集/交互方式汇总

本篇博客意在总结一下数据采集/交互的方式,直白点说就是接口/通信的问题,即怎样建立和对端的通信连接,数据怎样传送,采用什么方式入库等。我们的世界就是一个万物互联的世界,本质上讲日常生活中我们都在做信息交互,像古代战争时候的烽火台,到近现代战争的电报/电话,再到现在的互联网/信息化,信息的交互非常重要。
网络编程的三要素
IP地址:每个设备在网络中的唯一标识,本地回路地址127.0.0.1,广播地址255.255.255.255,IPV4 4个0-255,IPV6 共8组,每组4个16进制;
端口号:每个程序在设备上的唯一标识,每个网络程序都需要绑定一个端口号,传输数据时除了明确发到哪台机器还要明确发到哪个程序;
协议:为计算机网络进行数据交互而建立的规则,其中UDP面向无连接,数据不安全但是速度快,不区分服务端和客户端;TCP面向连接(三次握手)数据安全但是速度略低,区分服务端和客户端,客户端向服务端发送请求,服务端响应请求,传输数据。
part1:socket接口
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的socket标识符套接字。在java中比较重要的两个类有socket类和ServerSocket类,前者是java.net.Socket类,一般用于客户端代码的编写;后者是java.net.ServerSocket类,一般用于服务端代码的编写,ServerSocket与Socket不同,ServerSocket是等待客户端的请求,一旦获得一个连接请求,就创建一个Socket示例来与客户端进行通信。 当然,这里的客户端和服务端也是一个相对的概念,客户端和服务端都可以相互读写对方的数据,一般来讲就是服务端是数据源,客户端去服务端取数据或者服务端将数据推送给客户端,这里重点讲的场景是我作为服务端,如何接收客户端的数据。
步骤1:测试一下服务端和客户端路由端口是否开通,并且要在服务端开启端口并确保此端口未占用。
telnet ip地址 端口号 查看端口是否开通,Windows下测试如果开通会出现黑框,没有任何提示信息,这时退出:CTRL+] 之后输入quit;
lsof -i:A 查看A端口有没有被占用;
如果端口未开通,在linux服务器下使用firewall或者iptables开启,具体可以参考链接资料。
补充:端口号的范围从0到65535,但是数字较小的端口一般已经默认占用,比如:
ftp(21) SSH(22) smtp(25) web(80) oracle(1521)
mysql(3306) QQ(4000) tomcat(8080)
步骤2:代码

public void server() {
    
    
		ServerSocket serverSocket = null;
		Socket client = null;
		OutputStream dos = null;    //输出流
		InputStream dis = null;    //输入流
		try{
    
    
		serverSocket = new ServerSocket(port);
		System.out.println("Server is starting...\n");
		client = serverSocket.accept();
		dis = client.getInputStream();
		BufferedReader inReader = new BufferedReader(new InputStreamReader(dis,"GB2312"));
		StringBuffer sBuffer = new StringBuffer();
        while(true) {
    
     
        	String line = inReader.readLine();
        	System.out.println("客户端发过来的内容:" + line); 
         }
     }
 }

part2:http接口
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。HTTP协议采用了请求/响应模型,客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、请求头部和请求数据等。服务器以一个状态行作为响应,响应的内容包括协议版本、状态代码、服务器信息、响应头部和响应数据。
步骤1:同tomcat步骤,需要保证路由状态和端口空闲。
步骤2:代码

public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
    
    
		String ip = req.getRequestURI();
        Map<String, String[]> map = req.getParameterMap();
        StringBuffer inputString = new StringBuffer();
        for (String key:map.keySet()) {
    
    
            inputString.append(key);
            inputString.append("=");
            inputString.append(Arrays.toString(map.get(key)));
        }
        System.out.println(inputString.toString());
        resp.setContentType("application/json;charset=utf-8");
        resp.setCharacterEncoding("utf-8");
	}
	
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
    
    
		String ip = req.getRequestURI();
		InputStream dis = req.getInputStream();
		BufferedReader reader = new BufferedReader(new InputStreamReader(dis,"utf-8"));
        String line = "";
        StringBuffer inputString = new StringBuffer();
        while ((line = reader.readLine())!=null) {
    
    
            inputString.append(line);
        }
        JSONObject jsonObject = JSONObject.fromObject(inputString.toString());
        System.out.println(jsonObject.toString());
        resp.setContentType("application/json;charset=utf-8");
        resp.setCharacterEncoding("utf-8");
    }

part3:ftp文件传输
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
代码见参考资料。

参考链接:
https://blog.csdn.net/qq_41517936/article/details/81015711 Socket和ServerSocket的简单介绍及例子
https://blog.csdn.net/zx110503/article/details/78787483 CentOS7开启端口(永久)
https://blog.csdn.net/qq_39946015/article/details/104374427?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCfhttp http请求与响应,客户端与服务端接口开发
https://www.cnblogs.com/huzi007/p/4236150.html java实现ftp文件的上传与下载

猜你喜欢

转载自blog.csdn.net/langxiaolin/article/details/113769868