黑馬程序員_學習記錄17:網絡編程

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

1、基本概念

2、UDPTCP的區別

3、Socket及傳輸接受數據

4、TCP傳輸


1、基本概念

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

網絡模型:OSI參考模型、TCP/IP參考模型

2UDPTCP的區別

 

UDP——聊天,視頻會議,桌面共享

• 將數據及源和目的封裝成數據包中,不需要建立

• 每個數據報的大小在限制在64k

• 因無連接,是不可靠協議

• 不需要建立連接,速度快 

TCP

• 建立連接,形成傳輸數據的通道。

• 在連接中進行大數據量傳輸

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

• 必須建立連接,效率會稍低Socket

l

3Socket 及傳輸接受數據

Socket就是爲網絡服務提供的一種機制。 

通信的兩端都有Socket。 

網絡通信其實就是Socket間的通信。l

數據在兩個Socket間通過IO傳輸。

需求:通過udp傳輸方式,將一段文字數據發送出去。,

定義一個udp發送端。

思路:

1、建立updsocket服務。

2、提供數據,並將數據封裝到數據包中。

3、通過socket服務的發送功能,將數據包發出去。

4、關閉資源。

需求:

定義一個應用程序,用於接收udp協議傳輸的數據並處理的。

定義udp的接收端。

思路:

1、定義udpsocket服務。通常會監聽一個端口。其實就是給這個接收網絡應用程序定義數字標識。方便於明確哪些數據過來該應用程序可以處理。

2、定義一個數據包,因爲要存儲接收到的字節數據。因爲數據包對象中有更多功能可以提取字節數據中的不同數據信息。

3、通過socket服務的receive方法將收到的數據存入已定義好的數據包中。

4、通過數據包對象的特有功能。將這些不同的數據取出。打印在控制檯上。

5、關閉資源。

receivedp);阻塞式方法。read();也是。


4.TCP傳輸


SocketServerSocket

建立客戶端和服務器端

建立連接後,通過Socket中的IO流進行數據的傳輸

關閉socket


同樣,客戶端與服務器端是兩個獨立的應用程序。

基本思路(客戶端)

 客戶端需要明確服務器的ip地址以及端口,這樣才可以去試着建立連接,如果連接失敗,會出現異常。


連接成功,說明客戶端與服務端建立了通道,那麼通過IO流就可以進行數據的傳輸,而Socket對象已經提供了輸入流和輸出流對象,通過getInputStream(),getOutputStream()獲取即可。

 

與服務端通訊結束後,關閉Socket

基本思路(服務端)

服務端需要明確它要處理的數據是從哪個 端口進入的。

當有客戶端訪問時,要明確是哪個客戶  端,可通過accept()獲取已連接的客戶端  對象,並通過該對象與客戶端通過IO流進  行數據傳輸。

當該客戶端訪問結束,關閉該客戶端

客戶端

 

通過Socket建立對象並指定要連接的服務

端主機以及端口。

Socket s = new Socket(192.168.1.1,9999);

OutputStream out = s.getOutputStream();

out.write(hello.getBytes());

s.close();

服務端

建立服務端需要監聽一個端口 ServerSocket ss = new ServerSocket(9999);

Socket s = ss.accept ();

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int num = in.read(buf);

String str = new String(buf,0,num);

System.out.println(s.getInetAddress().toString()+:+str);

s.close();

ss.close();

Tcp傳輸最容易出現的問題

 客戶端連接上服務端,兩端都在等待,沒有任何數據傳輸。

通過例程分析: 因爲read方法或者readLine方法是阻塞式。

解決辦法:

• 自定義結束標記

• 使用shutdownInputshutdownOutput方法。

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

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