萬盛學電腦網

 萬盛學電腦網 >> 網絡基礎知識 >> java網絡編程基礎相關知識

java網絡編程基礎相關知識

id="conbox">

  現在JAVA作為主流編程語言,如果想要學會java網絡編程,需要掌握一定的基礎,學習啦小編在這裡給大家帶來java網絡編程基礎的相關知識,希望能幫到大家。

  進行網絡通信需要的三要素:ip、端口、協議

  IP: 連接在internet中每台主機地址的標識,32bit。

  //獲取IP

  InetAddress i = InetAddreass.getLocalHost();

  InetAddress ia = InetAddreass.getByName("www.baidu.com");

  sop("address:"+ia.getHostAddreass());

  sop("name:"+ia.getHostName());

  端口:

  1、網絡設備接口(集線器、交換機、路由器)----物理

  2、TCP/IP協議中的接口.----邏輯

  0~65535

  0~1024

  ..計算機運行程序的標識

  協議:

  UDP:

  將數據、源、目的封裝成數據包,不需要建立連接

  每個數據包限制在64K內

  因無連接,是不可靠協議

  不需要建立連接,速度快

  TCP:

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

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

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

  必須建立連接,是可靠協議

  InetAddress類:

  基本方法列舉

  getAddress()返回此 InetAddress 對象的原始 IP 地址。

  getHostAddress()返回 IP 地址字符串(以文本表現形式)。

  getHostName()獲取此 IP 地址的主機名。

  getAllByName(String host)在給定主機名的情況下,根據系統上配置的名稱服務返回其 IP 地址所組成的數組。

  getByName(String host)在給定主機名的情況下確定主機的 IP 地址。

  getLocalHost()返回本地主機。

  isReachable(int timeout)測試是否可以達到該地址。

  DatagramPacket類

  需求:通過UDP傳輸協議將一段文字數據發送出去

  思路:

  1、建立udpSocket服務

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

  3、通過Socket服務的發送功能將數據發送出去

  4、關閉資源

  面向Socket編程

  Socket就是為網絡服務提供的一種機制,對應於網絡中的傳輸層,通信的兩端都有Socket,網絡通信其實就是Socket間的通信,數據在兩個Socket間通過IO傳輸。

  無論是UDP的面向連接還是TCP的面向連接,我們面向的其實都是Socket。

  Socket中的一些常用方法:

  bind(SocketAddress bindpoint)將套接字綁定到本地地址。

  connect(SocketAddress endpoint)&connect(SocketAddress endpoint, int timeout)將此套接字連接到服務器,且後者可以指定一個超時值。

  getInetAddress()&getPort() 返回套接字連接的遠程地址及端口。

  getLocalAddress()&getLocalPort()獲取套接字綁定的本地地址即端口。

  getInputStream()&getOutputStream()返回此套接字的輸入輸出流。

  shutdownInput()&shutdownOutput()禁用此套接字的輸入流與輸出流,即使同時調用了兩方法也不能導致Socket關閉,另外shutdownOutput()方法通常用於告知服務端客戶端發送結束。

  URL類:

  類URL代表一個統一資源定位符,它是指向互聯網“資源”的指針。使用該類的openConnection()方法即可獲取對應的URLConnection對象,也可以通過openStream()方法直接獲取其所指向資源的輸入流。

  它也提供了一系列的get方法來提取封裝在URL對象中的信息

  URL中的基本方法:

  getFile()獲取此 URL 的文件名。

  getHost()獲取此 URL 的主機名(如果適用)。

  getPath()獲取此 URL 的路徑部分。

  getPort()獲取此 URL 的端口號。

  getProtocol()獲取此 URL 的協議名稱。

  getQuery()獲取此 URL 的查詢部分。

  URLConnection它代表應用程序和 URL之間的通信鏈接。此類的實例可用於讀取和寫入此 URL 引用的資源。

  創建一個到URL的連接需要幾個步驟:

  1、通過在 URL 上調用 openConnection 方法創建連接對象。

  2、處理設置參數和一般請求屬性。

  3、使用 connect 方法建立到遠程對象的實際連接。

  4、遠程對象變為可用,遠程對象的頭字段和內容變為可訪問。

  UDP實現發送和接收數據操作

  發送端代碼實例:

  import java.io.*;

  import java.net.*;

  class UdpSend{

  public static void main(String args[]) throws Excption{

  DatagramSocket ds = new DatagramSocket();

  byte[] buf = "abcde".getByte();

  DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddreass.getByName(" 127.0.0.1 "), 10000);

  ds.send(dp);

  ds.close();

  }

  }

  接收端代碼實例:

  import java.io.*;

  import java.net.*;

  class UdpReve{

  public static void main(String args[]) throws Excption{

  DatagramSocket ds = new DatagramSocket(10000);

  byte[] buf = new byte[1024];

  DatagramPacket dp = new DatagramPacket(buf, buf.length);

  ds.receive(dp);

  String ip = dp.getAddress().getHostAddress();

  String data = new String(dp.getDate(), 0, dp.getLength());

  int port = dp.getPort();

  System.out.println(ip+ "--" +data+ "--" +port);

  ds.close();

  }

  }

  //使用while(true)使接收端持續開啟

  練習:將本地圖片上傳到服務器,代碼實現:

  客戶端代碼實現:

  public class PicClient {

  public static void main(String args[]) throws Exception{

  Socket s = new Socket("117.84.140.104", 10001);

  FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1.jpg");

  OutputStream out = s.getOutputStream();

  byte[] buf = new byte[1024];

  int ch = 0;

  while((ch = fis.read(buf)) != -1){

  out.write(buf, 0, ch);

  }

  s.shutdownOutput();

  InputStream in = s.getInputStream();

  ch = in.read(buf);

  System.out.println(new String(buf, 0, ch));

  fis.close();

  s.close();

  }

  }

  服務器端代碼實現:

  public class PicServer {

  public static void main(String args[]) throws Exception{

  ServerSocket ss = new ServerSocket(10001);

  Socket s = ss.accept();

  InputStream in = s.getInputStream();

  FileOutputStream fis = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\2.jpg");

  byte[] buf = new byte[1024];

  int len = 0;

  while((len = in.read(buf)) != -1){

  fis.write(buf, 0, len);

  }

  OutputStream out = s.getOutputStream();

  out.write("上傳完畢".getBytes());

  }

  }

copyright © 萬盛學電腦網 all rights reserved