黑馬程序員_網絡編程

----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------

1、網絡模型:OSI參考模型(7層)和TCP/IP參考模型(4層)

2、網絡通信要素:IP地址,端口號、傳輸協議。

1)IP地址:

      A、它是網絡中的設備標識

      B、不易記憶,可用主機名錶示,兩者存在映射關係

      C、本機迴環地址:127.0.0.1,主機名爲:localhost

2)端口號:

      A、用於標識進程的邏輯地址,不用進程的標識。

      B、有效端口:0 ~ 65535,系統使用或保留的端口是:0 ~ 1024.

3)傳輸協議:

      A、即通信規則,包含TCP和UDP協議

      B、UDP是面向無連接,無論在不在網上,只管傳輸,不在就會丟失數據。只求速度,應用於網絡視頻會議和聊天等應用程序中

     協議特點:

            a、面向無連接,即將數據及源和目的封裝成數據包中,不建立鏈接的發送

            b、每個數據報的大小限制在64K之內

            c、因無連接,是不可靠的協議

            d、不建立連接,速度快。可以類比傳呼機,呼叫不確定對方是否在。

     C、TCP是面向連接的,必須連接成功才能傳輸數據,應用於下載等程序上

     協議特點:

            a、面向連接,在建立連接後,形成傳輸數據的通道

            b、在連接中進行大數據量的傳輸

            c、通過三次握手完成連接,是可靠的協議

            d、必須建立連接,效率稍慢。 可以類比打電話,需要兩邊相互交流。

三次握手:第一次本方發送請求,第二次對方確認連接,第三次本方再次確認連接成功。

import java.io.*;
import java.net.*;
//發送數據
class SendSocket implements Runnable
{
	//定義全局變量
	private DatagramSocket ds;
	//初始化發送類對象的參數
	public SendSocket(DatagramSocket ds)
	{
		this.ds = ds;
	}
	//覆寫run方法,此線程發送鍵盤錄入的數據
	public void run()
	{
		try
		{
			//創建讀取流,讀取鍵盤數據
			BufferedReader bufr =
				new BufferedReader(new InputStreamReader(System.in));
			String line = null;
			while((line=bufr.readLine())!=null)
			{
				if("886".equals(line))
					break;
				byte[] b = line.getBytes();
				//創建發送服務對象,將數據發送出去
				DatagramPacket dp =
				new DatagramPacket(b,b.length,InetAddress.getByName("192.168.1.255"),10001);
				ds.send(dp);
			}
			//關閉資源
			ds.close();
		}
		catch (Exception e)
		{
			throw new RuntimeException("發送失敗");
		}
	}
}

//接收數據
class ReceSocket implements Runnable
{
	//定義全局變量
	private DatagramSocket ds;
	//初始化接收類對象的參數
	public ReceSocket(DatagramSocket ds)
	{
		this.ds = ds;
	}
	//覆寫run方法,此線程接收數據
	public void run()
	{
		try
		{
			//循環讀取接收到的數據
			while(true)
			{
				//創建字節數組存儲數據
				byte[] by = new byte[1024];
				//創建接收數據的對象,接收數據
				DatagramPacket dp = new DatagramPacket(by,by.length);
				ds.receive(dp);
				//獲取發送方的ip地址
				String ip = dp.getAddress().getHostAddress();
				//getData獲取byte數組中的數據
				String data = new String(dp.getData(),0,dp.getLength());
				System.out.println(ip+":"+data);
			}
		}
		catch (Exception e)
		{
			throw new RuntimeException("接收失敗");
		}
	}
}
//測試
class SocketDemo 
{
	public static void main(String[] args) throws Exception
	{
		//創建發送和接收服務的對象
		DatagramSocket sendSocket = new DatagramSocket();
		DatagramSocket receSocket = new DatagramSocket(10001);
		//創建兩個線程,同時執行
		new Thread(new SendSocket(sendSocket)).start();
		new Thread(new ReceSocket(receSocket)).start();
	}
}



----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章