黑马程序员_网络编程总结
------- android培訓、java培訓、期待與您交流! ----------
//以下筆記來自畢向東老師課程的總結
網絡編程
網絡編程的實現方式
網絡編程有兩種實現方式:即通過TCP協議和UDP協議。
問:TCP和UDP有什么區別:
答:
1)????????TCP協議:屬于可靠的連接,在發送數據報之前建立連接,采用三次握手原則,可以保證數據能夠完整的傳輸到目的地,因而傳輸速度也會比較慢。
2)????????UDP協議:屬于不可靠的連接,發送數據包之前不會建立連接,不會保證數據報到沒到達目的地。
(1)UDP:
??a、將數據及源和目的封裝成數據包,不需要建立連接
??b、每個數據包的大小限制在64K內
??c、因無連接,是不可靠協議
??d、不需要建立連接,速度快
?(2)TCP:
??a、建立連接,形成傳輸數據的通道
??b、在連接中進行大數據量傳輸
??c、通過三次握手完成連接,是可靠協議
??d、必須建立連接,效率會稍低
TCP程序
在Java中TCP程序的實現:
|-??使用ServerSocket類來代表服務器端,public class?ServerSocket?extends Object
。
|-??使用Socket類來代表客戶端,public class?Socket?extends Object。
?
2、UDP傳輸
?(1)DatagramSocket,建立發送端send(DatagramPacket p)、接收端receive(DatagramPacket p)
?(2)DatagramPacket,數據報包用來實現無連接包投遞服務,構造函數有DatagramPacket(byte[] buf,int length,InetAddress address,int port)等
?(3)通信實現(發送端):
??a、建立udpsocket服務,例如DatagramSocket ds = new DatagramSocket()對象
??b、提供數據,并將數據封裝到數據包中,即將數據轉換成字節數組,再使用DatagramPacket進行封裝,例如byte[] buf = "udp is sending".getByte();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByname("192.168.0.100"),10000)
??c、通過socket服務的發送功能,將數據包發出去,ds.send(dp);
??d、關閉資源,例如ds.close();
?(4)通信實現(接收端):
??a、建立udpSocket服務,例如 DatagramSocket ds = new DatagramSocket(10000);
??b、建立一個數據包,因為接收到的是一個字節數據,數據包對象中有更多的功能用于提取字節數據的信息,例如 byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);
??c、通過socket服務的接收方法將收到的數據獲取到DatagramPacket中,ds.receive(dp);
??d、通過DatagramPacket的功能將數據流解讀出來,并輸出到需要的地方,例如,String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());
??e、關閉資源,ds.close();
3、TCP傳輸
?(1)Socket建立客戶端,SeverSocket建立服務器端
?(2)建立連接后,通過Socket中的IO流進行數據傳輸
?(3)關閉Socket
?(4)通信實現(客戶端):
??a、建立socket服務,tcp是面向連接的,在建立socket服務時就要指定要連接的主機和端口以建立連接,例如Socket soc = new Socket("192.168.0.100",10003);
??b、建立用于獲取或寫入socket輸入輸出流的IO流對象,例如OutputStream out = s.getOutputStream;InputStream in = new InputStream();
??c、向輸出流寫入數據,數據即可從socket輸出流輸出,out.write("tcpmsg is sending".getByte());使用輸入流讀取即可獲取socket輸入流的數據,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len);
??d、關閉資源,soc.close();
?(5)通信實現(服務端):
??a、建立SeverSocket服務,并監聽一個端口,SeverSocket ss = newSeverSocket(10003);
??b、通過accept方法獲取連接過來的客戶端對象,Socket s = ss.accept();
??c、客戶端如果發來數據,服務端使用上一步獲取的對應客戶端對象讀取數據,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len);
??d、關閉客戶端,釋放資源,s.close()
??e、關閉服務端,(如果還要等待下一個客戶端連接的話,也可以不關閉服務端),ss.close();
TCP傳輸
Socket和ServerSocket
建立客戶端和服務器端
建立連接后,通過Socket中的IO流進行數據的傳輸
關閉socket
同樣,客戶端與服務器端是兩個獨立的應用程序。
?
?基本思路(客戶端)
客戶端需要明確服務器的ip地址以及端口,這樣才可以去試著建立連接,如果連接失敗,會出現異 常。
連接成功,說明客戶端與服務端建立了通道,那么 通過IO流就可以進行數據的傳輸,而Socket對象已經提供了輸入流和輸出流對象,通過 getInputStream(),getOutputStream()獲取即可。
與服務端通訊結束后,關閉Socket。
通過Socket建立對象并指定要連接的服務端主機以及端口。
Socket s = new Socket(“192.168.1.1”,9999);
OutputStream out = s.getOutputStream();
out.write(“hello”.getBytes());
s.close();
?
?基本思路(服務端)
服務端需要明確它要處理的數據是從哪個 端口進入的。
當有客戶端訪問時,要明確是哪個客戶 端,可通過accept()獲取已連接的客戶端對象,并通過該對象與客戶端通過IO流進行數據傳輸。
當該客戶端訪問結束,關閉該客戶端。
建立服務端需要監聽一個端口
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();
轉載于:https://www.cnblogs.com/chen-bao-feng/archive/2013/03/22/2975128.html
總結
以上是生活随笔為你收集整理的黑马程序员_网络编程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TipsDBConfigListener
- 下一篇: Tizen 2.0 SDK 和源码发布