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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java-网络编程篇

發布時間:2024/9/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-网络编程篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.TCP/IP協議

?? 在Internet中TCP/IP協議是使用最廣泛的通訊協議。“傳輸控制協議/網際協議”/Transmission Control Protocol/Internet Protocol

  • ?? TCP/IP實際上是一組協議,它包括上百個各種功能的協議。如:“遠程登錄”,“文件傳輸”等,而
  • ????? TCP協議和IP協議只是保證數據完整傳輸的兩個重要協議。通常說TCP/IP是internet協議族,而
  • ???? ?不單單只是指TCP協議和IP協議。
  • ? TCP/IP協議的基本傳輸單位是數據包(datagram).

2.TCP協議

???TCP(transmission control protocol)傳輸控制協議。

  • 是專門設計用于在不可靠的因特網上提供可靠的,端到端的字節流通信協議。
  • 如果IP數據包中有已經封好的TCP數據包,那么IP將把它們向‘上’傳送到TCP層。
  • ?? TCP將包排序并進行錯誤檢查,同時實現虛電路間的連接(通過三路握手實現)。
  • ?? TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。

?? TCP是一種面向連接的通信協議,TCP連接提供兩臺計算機之間可靠無差錯的字節流數據傳輸。

3.IP地址和端口號

?? IP地址:網絡中每臺計算機的一個標識符,是一個邏輯地址。127.0.0.1代表本機地址。

?? 端口號:具有網絡功能的應用軟件的標識符。

  • 端口號總共有2的16次方個(65536),0-1023是公認端口號,
  • ???? 1024-65535是還沒有定義的端口號,用戶可以自己使用
  • 端口與協議有關:TCP和UDP的端口互不相干。

4.IP地址

?? IP地址是使用32位(4個字節)二進制表示。一般用十進制顯示如:182.168.1.3。

?? IP地址分類:5類,A類:給政府機構用。B類:給中等規模公司用。C類:給有任何需要的人用

??????????????????? D類:用于組播。E類:用于實驗。

??

? 在實際中可以使用127.0.0.1表示本機(本機IP地址或回路地址),或者直接使用localhost代表本機。

? ping 127.0.0.1 是用來測試網卡是否正常。

? 后三位都為0的和后三位都為255的不在其中,另有他用。

4.1 域名

http://www.sina.com.cn?? 域名
??http:協議
??www:www組織
??sina:主機名
??com;商業? net :非盈利組織 org:政府,edu:教育
??cn:中國

5.Socket套接字

  • 兩個應用程序可以通過一個雙向的網絡通信連接實現數據交換,這個雙向鏈路的一端稱為一個Socket。
  • Socket可以看成在兩個程序在進行通訊連接中的一個端點,一個程序將一段信息寫入一個Socket中,
  • ? 該Socket將這段信息發送給另一個Socket中,使這段信息能傳送到其他程序中。
  • Socket通常用來實現client-server連接,建立連接需要的尋址信息為IP和端口號(Port Number)。

6.網絡編程的四個基本步驟

  • 創建Socket;
  • 打開鏈接到Socket的輸入/輸出流;
  • 按照一定的協議對Socket進行讀/寫操作;
  • 關閉Socket;

???? 演示Demo

public class TCPServer //Server端 {public static void main (String []args){try{ServerSocket ss=new ServerSocket (8888);//建立服務端while(true){Socket s1=ss.accept();//返回Socket端BufferedWriter bw=new BufferedWriter //建立寫入流;(new OutputStreamWriter(s1.getOutputStream()));//向寫入流寫入內容bw.write("你好"+s1.getInetAddress()+":"+s1.getPort()); //關閉資源 bw.close(); s1.close(); } }catch (Exception e) { } }} public class TCPClient //客戶端 { public static void main (String []args) { try{ Socket s=new Socket ("127.0.0.1",8888); BufferedReader br=new BufferedReader (new InputStreamReader(s.getInputStream())); System.out.println("服務器說:"+br.readLine()); br.close(); s.close(); }catch (Exception e) { } }}

7.TCP Socket通信模型

java.net包中定義了兩個類:Socket和ServerSocket ,分別用來實現TCP的Client和Server端

7.1 TCP/IP中的協議

  • UDP(User Datagram Protocol)用戶數據報協議
  • UDP和TCP位于同一層(傳輸層),但它對數據包的順序錯誤和重發沒有TCP來的可靠。因此,UDP不被應用
  • ? 于那些使用虛電路的面向直接服務,UDP主要用于面向查詢-應答的服務。
  • UDP是一種面向無連接(只發送無需建立連接)的通信協議,UDP向應用程序提供一種發送封裝的原始IP數據報
  • ? 的方法,并且發生時無需建立連接,不保證可靠數據的傳輸。

8.UDP網絡編程

  • 面向無連接的數據傳輸,不可靠,效率高。常用于音頻,視頻...
  • UDP一次發送的數據不能超過64KB。

? UDP編程所需要的類。

????? DatagramSocket?此類表示用來發送和接收數據報包的套接字

????? DatagramSocket (int port) ;//創建本地主機的指定端口

????? DatagramSocket (int port ,InetAddress laddr) ;//

????? DatagramPacket?此類表示數據報包。(多個包發送時會選擇不同的路由發送,且按不同的順序到達)

??????DatagramPacket (byte[] buf,int length,InetAddress address,int port);

????? DatagramPacket(byte[] buf,int length,SocketAddress address);

??????InetAddress類。

????? static?InetAddress?getByName(String host);//靜態方法,其沒有構造方法

????? //eg:?InetAddress?ia=InetAddress.getByName("192.168.1.1");返回一個指定iP的對象。

??????SocketAddress是抽象類,其實現的子類為InetSocketAddress。

????? 構造方法:

?????????? InetSocketAddress (InetAddress addr,int port);

?????????? InetSocketAddress (int port);//創建套接字地址,其中IP地址為通配符地址。

?????????? InetSocketAddress (String hostname,int port);//hostname為IP地址

?發送端:?1:建立DatagramSocket,(此socket端口隨機)。

???????????? 2:建立DatagramPacket,(指定發送地址的ip和端口)。

???????????? 3:使用socket的send方法發送。

?????????????4:關閉資源

?接收端:1:建立DatagramSocket,(監聽的端口為發送端packet的指定端口)。

????????????2:建立DatagramPacket,(無需指定ip和端口)。

??????????? 3:使用socket的receive方法接收。?

??????????? 4:關閉資源

?發送端代碼:

import java.io.IOException ; import java.net.*; //發送端 public class UDPSender {public static void main (String[]args){String str="你好嗎!";DatagramSocket ds=null; DatagramPacket dp=null; try{ //定義一個發送包的socket ,端口使用9999 ds=new DatagramSocket(9999); //要發送的數據包,一定要指定ip和port String ip="127.0.0.1"; byte[]buf=str.getBytes(); dp=new DatagramPacket (buf,buf.length,InetAddress.getByName(ip),8888); //發送數據 ds.send(dp); }catch(Exception e) {} finally{ if(ds!=null) ds.close(); } } }

?接收端代碼:

import java.io.IOException ; import java.net.*; //發送端 public class UDPSender {public static void main (String[]args){String str="你好嗎!";DatagramSocket ds=null; DatagramPacket dp=null; try{ //定義一個發送包的socket ,端口使用9999 ds=new DatagramSocket(9999); //要發送的數據包,一定要指定ip和port String ip="127.0.0.1"; byte[]buf=str.getBytes(); dp=new DatagramPacket (buf,buf.length,InetAddress.getByName(ip),8888); //發送數據 ds.send(dp); }catch(Exception e) {} finally{ if(ds!=null) ds.close(); } } } //接收端 public class UDPReceiver { public static void main (String []args) { byte[]buf=new byte[1024]; DatagramSocket ds=null; DatagramPacket dp=null; try{ //在8888端口監聽并接受數據包 ds=new DatagramSocket("8888"); dp=new DatagramPacket(buf,buf.length); while(true) { //收數據--此方法在接收到數據報前一直阻塞 ds.receive(dp); //dp.getLength();得到dp里的有效數據的長度 System.out.println(new String (buf,0,dp.getLength())); } }catch(Exception e) {} finally { if(ds!=null) ds.close(); } } }

?

轉載于:https://www.cnblogs.com/beyondbycyx/p/4643285.html

總結

以上是生活随笔為你收集整理的java-网络编程篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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