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控制器下发流标,实现负载均衡的思路。相信对以后会很有帮助。

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/wangqinze/p/8342240.html
Copyright © 2011-2022 走看看