黑馬程序員——網絡編程

  ------- android培訓java培訓、期待與您交流! ----------

網絡通訊最重要因素:1、ip地址(相當於人家快遞員給你送快點一樣) 2、端口(相當於你告訴人家小區以後,你要告訴人傢俱體幾樓幾棟幾單元)A類IP段 0.0.0.0 到127.255.255.255 (0段和127段不使用)

B類IP段 128.0.0.0 到191.255.255.255

C類IP段 192.0.0.0 到223.255.255.255

XP默認分配的子網掩碼每段只有255或0

A類的默認子網掩碼 255.0.0.0 一個子網最多可以容納1677萬多臺電腦

B類的默認子網掩碼 255.255.0.0 一個子網最多可以容納6萬臺電腦

C類的默認子網掩碼 255.255.255.0 一個子網最多可以容納254臺電腦

ip地址對象:ip目前分 ip4 和 ip6。而xp系統好像都是ip4。通用協議,而ip6協議在window7 系統已經加入了。

ip地址對象:InteAddress,ip 沒有直接的構造函數,他只有通過他的靜態方法返回他的對象。

1、getByName(String):可以是域名,可以是以ip地址形式。

2、getLocalHost():返回本機對象。

3、getAllByName():一臺機器對應多個ip地址時,返回 InteAddress數組

4、getHostAddress():返回對象的ip地址形式。


傳輸協議:分成2種形式:①UDP ②TCP

UDP:面向無連接,不需要建立連接,數據最大爲64kb,速度快,不安全。(對講機使用的就是該原理)

Tcp:面向連接,需要三次握手建立通道,當建立通道以後可以進行大數據傳輸,速度稍慢,安全。


UDP體驗:我是使用過對講機的,2部對講機調成同一個頻段以後,一方說話,另一方在有效範圍內收到數據就會立即播放出來。。2個不在同一個頻段上面,2個對講機依然可以講話,但是不可以互相接收數據了。  這裏的頻段可以理解爲 端口。

看一下QQ,它使用了多線程技術,監聽了不同的端口,而且還是採用的UDP。



TCP由於可以使用傳輸大數據,所以需要先建立理解。看人家迅雷。就是一個很好的例子!!如果人家迅雷採用UDP的話。你能有這麼快的速度嗎?

而且通過UDP下載以後,還有可能丟包呢。造成數據丟失呢。。而TCP就不會。




Socket:網絡服務的 一種機制。通信2端的 應用程序必須先有Socket才能通信。

現在我來使用UDP將一段信息發送出去。

import java.io.*;
import java.net.*;

class UDPScoket
{
	public static void main(String[] args) throws IOException
	{
		DatagramSocket ds = new DatagramSocket();<span style="white-space:pre">	</span>//使用Socket服務
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		String message = bufr.readLine();
		byte[] data = new byte[1024];
		data = message.getBytes();
		DatagramPacket dp = 
		new DatagramPacket(data,0,data.length,InetAddress.getByName("192.168.1.255"),55555);<span style="white-space:pre">	</span>//定義數據包,並將該數據發送至哪裏去
		ds.send(dp);<span style="white-space:pre">	</span>//發送
	}
}


由於發送端是沒有設置端口的,所以系統自動分配了一個端口。。192.168.1.255 是廣播地址,相當於給 192.168.1.2~192.168.1.254 發送信息,但是必須要有一個程序來接收並處理我發送的這些數據,並且他的端口必須是 55555


製作一個接收端:

import java.net.*;
import java.io.*;

class UDPPacket 
{
	public static void main(String[] args) throws IOException
	{
		DatagramSocket ds =new DatagramSocket(55555);	//創建Socket服務,監聽55555端口

		byte[] data = new byte[1024];
		DatagramPacket dp =new DatagramPacket(data,data.length);<span style="white-space:pre">	</span>//定義數據包,存儲接收的字節數據
		
		ds.receive(dp);		//阻塞式方法,等到接收數據
		
		String ip = dp.getAddress().getHostAddress();	//打印發來數據的Ip地址

		String message = new String(dp.getData(),0,dp.getLength());	//取出數據

		System.out.println(ip + "發來訊息:" + message);	
	}
}








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