標籤:http java 資料 os 問題 工作
IP地址和連接埠
IP地址:是電腦在網路中的唯一標示,我們在進行網路編程時一定要定位到遠端電腦,而IP地址就是解決這個問題的。
連接埠:除了電腦外我們還要定位到具體的應用程式進程,而連接埠就是給應用程式分配的身份標示。
UDP和TCP
UDP:1,每個資料報中都給出了完整的地址資訊,因此無需要建立發送方和接收方的串連。
2,UDP傳輸資料時是有大小限制的,每個被傳輸的資料報必須限定在64kB之內。
3,UDP是一個不可靠的協議,發送方所發送的資料報並不一定以相同的次序到達接收方。
TCP:1,連線導向的協議,在socket之間進行資料轉送之前必須要建立串連,是通過三向交握來建立串連的,所以在TCP中需要串連時 間。
2,TCP傳輸資料大小限制,一旦串連建立起來,雙方的socket就可以按統一的格式傳輸大的資料。
3,TCP是一個可靠的協議,它確保接收方完全正確的擷取發送方所發送的全部資料。
資料框架格式
Socket
簡單理解下,Socket就是一個應用程式編程的機制和一種介面,可以理解為是應用程式建立的一個港口碼頭,應用程式只要把裝著貨物的集裝箱(在程式中就是要通過網路發送的資料)放到港口碼頭上,就算完成了貨物的運送,剩下來的工作就由貨運公司去處理了(在電腦中由驅動程式來充當貨運公司)。如果把DatagramSocket比喻為建立的港口碼頭,那麼DatagramPacket就是我們發送和接收資料的集裝箱。
關於InetAddress類
java中的InetAddress 類是一個代表IP地址的封裝。IP地址可以由位元組數組和字串來分別表示,InetAddress將IP地址以對象的形式進行封裝,可以更方便的操作和擷取其屬性。InetAddress沒有構造方法,可以通過兩個靜態方法獲得它的對象。
public class IPDemo {
/**
* @param args
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException {
//擷取本地主機ip對象。
// InetAddress ip = InetAddress.getLocalHost();
InetAddress ip = InetAddress.getByName("192.168.1.252");
//擷取ip對象中的ip地址字串。或者ip地址對應的主機名稱。
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());
}
}
UDP編程
接收端
public class UDPRece {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/*
* udp的接收端:
* 思路:
* 1,建立udpsocket服務。
* 2,接收資料並儲存到資料包中,儲存到資料包中的目的是為瞭解析接收到的資料。
* 3,將解析到的資料列印到顯示器。
* 4,關閉服務。
*/
System.out.println("udp 接收端開啟");
//1,建立udp的socket服務。用於接收端,一定要指定連接埠,因為必須要明確從哪個連接埠來的資料是這個應用程式所能解析的。
//簡單說:接收端必須監聽一個連接埠。
DatagramSocket ds = new DatagramSocket(10000);
//2,接收資料到資料包中。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
//3,解析資料包中的具體資料。
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":::"+port+":::::"+text);
//4,關閉資源。
ds.close();
System.out.println("udp 接收端關閉");
}
}
發送端
public class UDPSend {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/*
* 通過udp協議建立一個發送端。
* 思路:
* 1,應該有可以通過該協議傳輸資料的對象。先有udp服務。
* 2,有資料,並將資料封裝到資料包,並在包上明確目的地址。
* 3,通過udp服務將這個資料包發出去。
* 4,關閉資源。
*/
System.out.println("udp 發送端開啟");
//1,建立udp socket服務.
DatagramSocket ds = new DatagramSocket(8888);
//2,明確資料,並將資料封裝到資料包中。
String str = "udp示範,哥們來了";
byte[] buf = str.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.252"),10000);
//3,將資料包通過socket服務發送。
ds.send(dp);
//4,關閉資源。
ds.close();
System.out.println("udp 發送端關閉");
}
}