網絡編程簡述

網絡編程

計算機網路
  • 所謂計算機網絡,就是把分佈在不同區域的計算機與專門的外部設備用通信線路相互連接成一個規模大,而且功能強的網絡系統,從而使得計算機之間可以相互傳遞信息,共享數據、軟件等資源
  • 所謂的網絡編程,指的就是在同一個網絡中不同機器之間的通信
IP地址
  • IP地址的是互聯網地址(Internet Protocol Address),是聯網設備與互聯網之間的唯一標識,在同一個網段中,IP地址是唯一的
  • IP地址是數字型的,是一個32位的整數,通過將其分成4個8位的二進制數,每8位之間用圓點隔開,每個8位整數可以轉換爲一個0~255的十進制整數
  • 分爲IPV4和IPV6
  • IP地址分類
A類:保留給政府結構,1.0.01~126.255.255.254
B類:分配給中型企業,127.0.0.1~191.255.255.254
C類:分配給任何需要的個人,192.0.0.1~223.255.255.254
D類:用於組播,224.0.0.1~239.255.255.254
E類:用於實驗,240.0.0.1~255.255.255.254
端口
  • 數據的發送和接收都需要通過端口出入計算機,端口號用於唯一標識通信實體上進行網絡通訊的程序,同一臺機器上不能兩個程序佔用同一個端口
  • 端口號的取值範圍:0~65535
  • 端口分類:
  • 公認端口:0~1023
  • 註冊端口:1025~49151
  • 動態或私有端口:1024~65535
  • 常用端口:
    • mysql:3306
    • oracle:1521
    • tomcat:8080
通信協議
  • 需要通信的設備之間需要實現相同的通信協議
  • 網絡分層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層
  • 通信協議分類:
    • 傳輸層協議:TCP和UDP
    • 網絡層IP協議:IPV4和IPv6,互聯網協議
    • 應用層協議:HTTP

相關類的使用

InetAddress類
package waking.test.wl;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * InetAddress類
 * @author waking
 *
 */
public class Demo01 {
	public static void main(String[] args) {
		//生成InetAddress
		InetAddress ia = null;
		try {
			//獲取主機地址
			ia = InetAddress.getLocalHost();
			System.out.println(ia);//Waking/192.168.244.1
			
			//獲取主機名稱
			String hostName = ia.getHostName();
			System.out.println(hostName);//Waking
			
			//獲取IP地址
			String hostAddress = ia.getHostAddress();
			System.out.println(hostAddress);//192.168.244.1
			
			//獲取指定主機地址
			ia = InetAddress.getByName("www.baidu.com");
			System.out.println(ia);//www.baidu.com/183.232.231.172
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
URLEncoder類和URLDecoder類
package waking.test.wl;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * URLEncoder類和URLDecoder類
 * @author waking
 *
 */
public class Demo02 {
	public static void main(String[] args) {
		 try {
			 //編碼
			String encode = URLEncoder.encode("waking","GBK");
			System.out.println(encode);
			
			//解碼
			String decode = URLDecoder.decode(encode,"utf-8");
			System.out.println(decode);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

TCP網絡通信

  • TCP,Transmission Control Protocol,傳輸控制協議,基於字節流的傳輸層通信協議
  • 特點:
安全的
面向鏈接的
傳輸數據無限制,一旦連接建立,雙方可以按統一的格式傳輸大的數據
  • TCP的三次握手
客戶端向服務端發送一個請求
服務端收到請求後,回客戶端一個響應
客戶端向收到服務端的響應後,回服務端一個確認信息
socket模型

alt

代碼實現
  • 客戶端
package waking.test.wl;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * socket編程
 * 客戶端
 * @author waking
 *
 */

public class Demo03 {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket so = new Socket("127.0.0.1", 9099);
		//獲取字節流
		OutputStream os = so.getOutputStream();
		String name = "waking";
		//發送
		os.write(name.getBytes(), 0, name.length());
		os.flush();
		//關閉連接
		so.close();
	}
}

  • 服務端
package waking.test.wl;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服務端
 * @author waking
 *
 */
public class Demo030 {
	public static void main(String[] args) throws IOException {

		ServerSocket ss = new ServerSocket(9099);
		//連接客戶端
		Socket accept = ss.accept();
		InputStream is = accept.getInputStream();
		byte[] b = new byte[1024];
		int read = is.read(b);
		
		System.out.println(new String(b, 0, read));
		//關閉連接
		ss.close();
	}
}
  • 上傳圖片
  • 客戶端
package waking.test.wl;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;


/**
 * 客戶端上傳圖片
 * @author waking
 *
 */
public class Demo04 {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket so = new Socket("127.0.0.1", 9009);
		//獲取字節輸入流
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("E://timg.jpg")));
		BufferedOutputStream bos = new BufferedOutputStream( so.getOutputStream());
		
		byte[] b  = new byte[1024];
		int len = -1;
		while((len=bis.read(b))!=-1) {
			bos.write(b, 0, len);
		}
		
		//關閉連接
		bos.close();
		bis.close();
		so.close();
	}
}
  • 服務端
package waking.test.wl;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服務端接受圖片
 * @author waking
 *
 */
public class Demo040 {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(9009);
		//連接
		Socket accept = ss.accept();
		//生成字節流
		BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("E://a.jpg")));
		
		byte[] b = new byte[1024];
		int len = -1;
		
		while((len=bis.read(b))!=-1) {
			bos.write(b, 0, len);
		}
		
		//關閉連接
		bos.close();
		bis.close();
		accept.close();
		ss.close();
	}
}

UDP通信

  • 這裏簡單介紹
  • User Datagram Protocol的簡稱,用戶數據包協議,提供面向事物的簡單不可靠信息傳送服務
特點:
不安全
無連接
效率高
UDP傳輸數據時是有大小限制的,每個被傳輸的數據報必須限制在64kb之內
發佈了19 篇原創文章 · 獲贊 19 · 訪問量 5636
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章