zoukankan      html  css  js  c++  java
  • SDN课程作业总结

    SDN 期末作业总结

    设计场景

    我们采用参考场景一,实现负载均衡,拓扑图及端口示意如下:
    image

    演示视频

    视频地址

    关键代码
    package loadBalance;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Base64;
    
    import net.sf.json.*;
    public class Main {
    	public static JSONObject jsonObject = null;
    	public static JSONObject[] jsonArray = new  JSONObject[100];
    	static String url24= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
    	static String url14= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1";
    	static String url21= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
    	static String url12= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1";
    
    	public static JSONObject httpRequest(String requestUrl, String requestMethod,int index) {
            StringBuffer buffer = new StringBuffer();
            try {
    
                URL url = new URL(requestUrl);
                // http协议传输
                HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
                httpUrlConn.setDoOutput(true);
                httpUrlConn.setDoInput(true);
                httpUrlConn.setUseCaches(false);
                
                String userPassword = "admin" + ":" + "admin";
                String encoding =  Base64.getEncoder().encodeToString((userPassword).getBytes());
                httpUrlConn.setRequestProperty("Authorization", "Basic " + encoding); 
                
                httpUrlConn.setRequestProperty("Connection", "Keep-Alive"); // 设置维持长连接
                httpUrlConn.setRequestProperty("Charset", "UTF-8");// 设置文件字符集:
                
                
                // 设置请求方式(GET/POST)
                httpUrlConn.setRequestMethod(requestMethod);
    
                if ("GET".equalsIgnoreCase(requestMethod))
                {
                	httpUrlConn.connect();
                    // 将返回的输入流转换成字符串
                    InputStream inputStream = httpUrlConn.getInputStream();
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    
                    String str = null;
                    while ((str = bufferedReader.readLine()) != null) {
                        buffer.append(str);
                    }
                    
                    bufferedReader.close();
                    inputStreamReader.close();
                    // 释放资源
                    inputStream.close();
                    inputStream = null;
                    httpUrlConn.disconnect();
                    jsonObject = JSONObject.fromObject(buffer.toString());
                  //  System.out.println(buffer.toString());
                    
                }else if("PUT".equalsIgnoreCase(requestMethod)){
                	byte[] data = (jsonArray[index].toString()).getBytes();//转换为字节数组
                    httpUrlConn.setRequestProperty("Content-Length", String.valueOf(data.length));// 设置文件长度
                    httpUrlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
                 // 开始连接请求
                    httpUrlConn.connect();
                    OutputStream  out = httpUrlConn.getOutputStream();   
                 // 写入请求的字符串
                    out.write((jsonArray[index].toString()).getBytes());
                    out.flush();
                    out.close();
                    if (httpUrlConn.getResponseCode() == 200) {  
                    	System.out.println("发送成功");
                    }
                    
                }else if("DELETE".equalsIgnoreCase(requestMethod)){
                	
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return jsonObject;
        }
    	public static void init() throws IOException{
    		String s = null;
    		int i = 0;
    		try {
    			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("DATA.txt"),"UTF-8"));
    			while((s = br.readLine())!=null){
    				jsonArray[i] = JSONObject.fromObject(s);
    				i++;
    			}
    			String url31= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/0";
    			String url32= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/1";
    			String url11= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/0";
    			String url22= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/1";
    			String url13= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/2";
    			String url23= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/2";
    			String url33= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/2";
    			httpRequest(url31,"PUT",0);
    			httpRequest(url32,"PUT",1);
    			httpRequest(url21,"PUT",2);
    			httpRequest(url11,"PUT",3);
    			httpRequest(url12,"PUT",4);
    			httpRequest(url22,"PUT",5);
    			httpRequest(url13,"PUT",6);
    			httpRequest(url23,"PUT",7);
    			httpRequest(url33,"PUT",10);
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static int getReceived(String url2){
    		 jsonObject =  httpRequest(url2,"GET",0);
    			JSONArray j1 = (JSONArray) jsonObject.get("node-connector");
    			JSONObject j2 = (JSONObject) j1.get(0);
    			JSONObject j3 =  (JSONObject) j2.get("opendaylight-port-statistics:flow-capable-node-connector-statistics");
    			JSONObject j4 =  (JSONObject)j3.get("bytes");
    			int received = (int) j4.get("received");
    			return received;
    	}
    	public static void main(String[] args) {
    		System.out.println("-------------------------------------------------");
    		try {
    			init();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		String s = "";
    		String url = "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/1";
    		String url1= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
    		String url2 = "http://172.17.172.244:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:2/node-connector/openflow:2:2";
    //		 jsonObject =  httpRequest(url2,"GET",0);
    //		System.out.println(jsonObject.toString());
    		int received ;
    		int temp = 0;
    		while(true){
    			
    			received = getReceived(url2);
    			try {
    				Thread.sleep(5000);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} 
    			System.out.println(received-temp);
    			if(received-temp<10000){
    				//下负载均衡流表
    //				System.out.println(received-temp);
    				httpRequest(url24,"PUT",8);
    				httpRequest(url14,"PUT",9);
    			}else if(received-temp>10000 ){
    //				System.out.println(received-temp);
    				httpRequest(url21,"PUT",2);
    				httpRequest(url12,"PUT",4);
    			}
    			temp = received;
    		}
    		
    //		jsonObject =  httpRequest(url1,"PUT");
    		
    		
    		
    	}
    }
    
    
    期末分工

    主要负责代码编写,参与小组讨论。

    课程总结

    上了这门课程之后,使得我对sdn新构型网络有了更进一步的理解,通过控制面板和转发面的分离,更好的是的程序能够很好的控制网络各项功能,这是在传统网络上的一个大的飞跃。并且学会了简单的odl控制器下发流标,实现负载均衡的思路。相信对以后会很有帮助。

  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/wangqinze/p/8342240.html
Copyright © 2011-2022 走看看