JAVA網路編程基礎(一)

來源:互聯網
上載者:User
文章目錄
  •  1.IP地址和Port(連接埠號碼)
  •  2.TCP和UDP
  •  3.Socket
  •  4.Java中的網路編程類
  • 現在看下如何編寫UDP網路程式 

首先是一些基礎知識:

 1.IP地址和Port(連接埠號碼)

原生IP地址:172.0.0.1

連接埠號碼的範圍為0~65535之間(2個位元組),0~1023是用於知名網路服務和應用,所以最好不要用0~1023這些連接埠號碼

 2.TCP和UDP

TCP:傳輸控制通訊協定(Transmission Control Protocol)連線導向的通訊協定

UDP:使用者資料包通訊協定(User Datagram Protocol)不需連線的通訊協定

 3.Socket

Socket是網路驅動層提供給應用程式編程的介面和一種機制

可以把Socket比作是一個碼頭,應用程式將貨物運送到碼頭,就完成了貨物的運送。在另一邊,應用程式只需等貨物到達碼頭後將貨物取走就可以了。

Socket在應用程式中建立,通過一種綁定機制與驅動程式建立關係,並告知對應的IP和連接埠

 4.Java中的網路編程類

位於java.net包中

DatagramSocket類用於UDP通訊

ServerSocket類用於TCP通訊的伺服器端

Socket類用於TCP通訊的伺服器和用戶端

 

現在看下如何編寫UDP網路程式 DatagramSocket類

構造方法

----public DatagramSocket()   (用於先發送的時候不用指定連接埠號碼,會自動選擇一個沒有用過的連接埠號碼)

----public DatagramSocket(int port)  (如果要接受資料,那就必須指定一個明確的連接埠號碼)

----public DatagramSocket(int port,InetAddress laddr)  (如果一個電腦上有多個IP地址的話,那就還需指定一個明確的IP地址……)

 

----close方法(釋放掉DatagramSocket的資源之後,連接埠號碼可以重新被其他網路資源所使用)

 

----send(DatagramPacket p)方法(用於發送UDP資料包)

----receive(DatagramPacket p)方法(用於接受UDP資料包)

DatagramPacket類

如果把DatagramSocket比作是碼頭,那麼DatagramPacket可以看作是發送和接受資料的集裝箱

構造方法

----public DatagramPacket(byte[] buff,int length)   (buff代表緩衝區,length代表緩衝區的大小,在接受資料時使用,不用指定IP地址和連接埠)

----public DatagramPacket(byte[] buff,int length,InetAddress address,int port) (address和port代表目標電腦的IP地址和連接埠,在發送資料時使用)

 

----getAddress,getPort,getData,getLength方法

InetAddress類

InetAddress是一個用於表示電腦IP地址的一個類

----getByName()  靜態方法,返回執行個體

----getHostAddress() 返回IP地址字串,形如“192.168.0.1”

 

最簡單的UDP程式

字串與位元組數組之間的雙向轉換

UDP接受程式必須先啟動才能接受到UDP發送程式所發送的內容

解決發送中文字串的問題

 

發送程式:

 1 import java.net.DatagramPacket;
2 import java.net.DatagramSocket;
3 import java.net.InetAddress;
4
5 public class UdpSend {
6 public static void main(String[] args) throws Exception {
7 DatagramSocket ds=new DatagramSocket();
8 String info="Hello World!";
9 ds.send(new DatagramPacket(info.getBytes(),info.length(),InetAddress.getByName("115.173.172.98"),3000));
10 ds.close();
11 }
12 }

接收程式:

 1 import java.net.DatagramPacket;
2 import java.net.DatagramSocket;
3
4 public class UdpRecv {
5 public static void main(String[] args) throws Exception {
6 DatagramSocket ds=new DatagramSocket(3000);
7 DatagramPacket dp=new DatagramPacket(new byte[1024],1024);
8 ds.receive(dp);
9 System.out.println(new String(dp.getData(),0,dp.getLength()));
10 System.out.println("from:"+dp.getAddress().getHostAddress()+":"+dp.getPort());
11 ds.close();
12 }
13 }

 

以上程式只能用來傳送英文字元,如果要傳送中文的話,需把發送程式中的info.length()改成info.getBytes().length,因為中文佔兩個位元組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.