java入門(mén) -- 網(wǎng)絡(luò)編程+DUP案例

/*

* 網(wǎng)絡(luò)編程:

* 作用:用于解決計(jì)算機(jī)支架的數(shù)據(jù)傳輸問(wèn)題;

* 網(wǎng)絡(luò)通訊的3要素:IP 端口號(hào) 協(xié)議

*

* getLocalHost(); 獲取當(dāng)前主機(jī)的對(duì)象

* getByName("ip或是主機(jī)名") 根據(jù)IP或是主機(jī)名獲取主機(jī)的IP地址對(duì)象

* getHostAddress() 返回一個(gè)IP地址的字符串表示形式

* getHostName() 返回計(jì)算機(jī)的主機(jī)名

* getAllByName() 根據(jù)域名獲取所有的IP地址

*

* 網(wǎng)絡(luò)通信

* 定義:網(wǎng)絡(luò)通信也叫Socket通信,通信的主機(jī)都必須按照Socket,不同的協(xié)議有不同的Socket

* udp協(xié)議下的Socket

* 說(shuō)明:UDP通信部分客戶(hù)端和服務(wù)端

*

* DatagramSocket udp插座服務(wù)

* DatagramPacket 數(shù)據(jù)包類(lèi)

* DatagramPacket(buf, length, address, port)

* buf: 發(fā)送的數(shù)據(jù)內(nèi)容

* length: 發(fā)送的數(shù)據(jù)內(nèi)容的大小

* address:發(fā)送的目的ip地址

* port : 通信的端口號(hào)

*

* 發(fā)送端的步驟:

* 1.建立udp服務(wù)

* 2.準(zhǔn)備服務(wù),把數(shù)據(jù)封裝到數(shù)據(jù)包中發(fā)送,發(fā)送端的數(shù)據(jù)包要帶上ip與端口號(hào);

* 3.調(diào)用udp的服務(wù)發(fā)送數(shù)據(jù):

* 4.關(guān)閉資源;

*

* 注意:

* 每個(gè)網(wǎng)絡(luò)程序都有自己定義的可處理的特定格式的數(shù)據(jù),如果接收到的數(shù)據(jù)不符合指定的格式,那么就會(huì)被當(dāng)成垃圾數(shù)據(jù)丟棄

*

* 廣播地址:

* 在UDP通信中,有一個(gè)IP地址稱(chēng)作為廣播地址,廣播地址就是主機(jī)好為255的地址。

*/

package com.lin.michael;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class Demo01 {

public static void main(String[] args) throws IOException{

//獲取本機(jī)的IP地址對(duì)象

/*InetAddress address = InetAddress.getLocalHost();

System.out.println("主機(jī)名:"+address.getHostName());

System.out.println("IP地址:"+address.getHostAddress());

//獲取網(wǎng)絡(luò)主機(jī)的IP地址對(duì)象,根據(jù)主機(jī)的IP字符串形式或是主機(jī)名獲取到IP地址對(duì)象

InetAddress address1 = InetAddress.getByName("192.168.1.2");

InetAddress[] addressArr = InetAddress.getAllByName("www.baidu.con");

for(InetAddress inetaddress : addressArr){

System.out.println(inetaddress.getHostAddress());

}*/

//1.建立udp服務(wù)

DatagramSocket datagramSocket = new DatagramSocket();

//2.準(zhǔn)備數(shù)據(jù)

String data = "Hello world!";

//3.將數(shù)據(jù)封裝到數(shù)據(jù)包中

DatagramPacket datapramPacket = new DatagramPacket(data.getBytes(),data.getBytes().length,InetAddress.getLocalHost(),9090);

//4.調(diào)用udp服務(wù)發(fā)送數(shù)據(jù)包

datagramSocket.send(datapramPacket);

//5.關(guān)閉資源? 釋放占用的端口號(hào)

datagramSocket.close();

}

}

/*

* 接收端

* 使用步驟:

* 1. 建立udp服務(wù);

* 2.準(zhǔn)備空的數(shù)據(jù)包接收數(shù)據(jù):

* 3.調(diào)用udp的服務(wù)接收數(shù)據(jù)包:

* 4.關(guān)閉資源;

*/

package com.lin.michael;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

public class Demorecieve {

public static void main(String[] args) throws IOException{

//1.建立udp的服務(wù)并且監(jiān)聽(tīng)端口

DatagramSocket datagramSocket = new DatagramSocket(9090);

//2. 準(zhǔn)備空的數(shù)據(jù)包用于存放數(shù)據(jù)

byte[] buf = new byte[1024];

DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);

//3.調(diào)用udp服務(wù),接收數(shù)據(jù)并存入到數(shù)據(jù)包中(byte數(shù)組中),recieve在沒(méi)有接到數(shù)據(jù)之前,會(huì)一直等到

datagramSocket.receive(datagramPacket);

//輸出數(shù)據(jù),datagramPacket.getLength()存儲(chǔ)的字節(jié)數(shù)

System.out.println("接收的數(shù)據(jù)是:" + new String(buf,0,datagramPacket.getLength()));

//關(guān)閉資源

datagramSocket.close();

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容