日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黑马程序员_网络编程总结

發布時間:2025/3/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员_网络编程总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

//以下筆記來自畢向東老師課程的總結

網絡編程

網絡編程的實現方式

網絡編程有兩種實現方式:即通過TCP協議和UDP協議。

問:TCPUDP有什么區別:

答:

1)????????TCP協議:屬于可靠的連接,在發送數據報之前建立連接,采用三次握手原則,可以保證數據能夠完整的傳輸到目的地,因而傳輸速度也會比較慢。

2)????????UDP協議:屬于不可靠的連接,發送數據包之前不會建立連接,不會保證數據報到沒到達目的地。

(1)UDP:
??a、將數據及源和目的封裝成數據包,不需要建立連接
??b、每個數據包的大小限制在64K內
??c、因無連接,是不可靠協議
??d、不需要建立連接,速度快
?(2)TCP:
??a、建立連接,形成傳輸數據的通道
??b、在連接中進行大數據量傳輸
??c、通過三次握手完成連接,是可靠協議
??d、必須建立連接,效率會稍低

TCP程序

JavaTCP程序的實現:

|-??使用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

總結

以上是生活随笔為你收集整理的黑马程序员_网络编程总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。