標籤:time public data- 記憶 隨機播放 ams unknown 資訊 手機
首先網路傳輸資料需瞭解例如以下三點
1、找到對方IP
2、資料要發送到對方指定的應用程式上,為了標識這些應用程式,所以給這些網路應用程式用數字進行了標識。為了方便稱呼這個數字,叫做port,邏輯port
3、 定義通訊規則。這個通訊規則稱為協議。
國際組織定義了通用協議TCP/IP。
127.0.0.1本機迴環地址 不易記憶,可用主機名稱 主機名稱:localhost
0-65535port範圍 0-1024系統使用或保留port 。當中mysql的port號為 3306
一、UDP
UDP相對於TCP來說是不可信任的
TCP在建立串連之前有3次握手,串連建立之後還有資料重傳機制來保證資料的穩定傳輸
而UDP並沒有握手機制和重傳機制。
簡單點說就是UDP通訊時僅僅管發,而無論對方收不收的到。
而TCP在每次通訊完畢後都要有一個包來確認是否收到。校正是否完善,否則就會重傳。
UDP
將資料及源和目的封裝成資料包中,不須要建立串連。每一個資料報的限制大小在64內,因無串連。是不可靠協議。
不須要建立串連,速度快。
TCP
建立串連,形成資料轉送的通道,在串連中進行大資料量傳輸,通過三向交握完畢串連。是可靠協議。必須建立串連。效率會稍低。
三向交握,(張三你在嗎?)(我在。)(好,我知道你在了。
)
以下是採用UDP發送方式的範例
(一)UDP發送端
需求:通過UDP傳輸方式,將一段文字資料發送出去。
思路:
1、 建立udpsocket服務
2、 提供資料,並將資料封裝到資料包中
3、 通過socket服務的發送功能。將資料包發送出去。
4、 關閉資源。
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 Work {public static void main(String[] args) throws IOException {//建立UDp服務,通過DatagramSocket對象,隨機播放資料連接埠進行發送DatagramSocket ds=new DatagramSocket();//確定資料。並封裝成資料包byte[] buf="dadfdadsfsafasdf".getBytes();DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.100"),1000);//通過socket服務。將已有的資料包發送出去,通過send方法ds.send(dp);//關閉資源ds.close();}}
(二)UDP接收端
定義udp的接收端
需求:
定義一個應用程式。用於接收UDP協議傳輸的資料並處理。
1、 定義udpSocket服務,一般會監聽一個port。
事實上就是給這個接收網路應用程式定義數位識別碼。方便於明白哪些資料過來應用程式能夠處理。
2、 定義一個資料包。由於要儲存接收到的位元組資料。
由於資料包對象中有很多其它功能能夠提前位元組資料中的不同資料資訊。
3、 通過socket服務的receive方法將收到的資料存入已定義好的資料包中
4、 通過資料包對象的特有功能。將這些不同的資料取出,列印在控制台上。
5、關閉資源
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;public class ReData {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(10000);byte[] arr = new byte[1024];DatagramPacket dp = new DatagramPacket(arr, arr.length);ds.receive(dp);/String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(), 0, dp.getLength());int port = dp.getPort();System.out.println(ip + ":" + data + ":" + port);ds.close();}}DatagramSocket ds = new DatagramSocket(10000);在while(true)迴圈運行該語句,就會出現連接埠已使用異常。
JAVA網路編程--UDP通訊