TwelfthDay--Java基礎(十)網絡編程

網絡編程:
 網絡基礎知識
  Mac地址:每個網卡專用地址,也是唯一的。
  端口(port):應用程序(進程)的標識(網絡通信程序)
   OS中可以有65536(2^16)個端口,進程通過端口交換數據。
   端口是一種抽象的軟件結構,與協議相關:TCP的23端口和UDT的23端口爲兩個不同的概念。
   端口應該用1024以上的端口,以下的端口都已經設定功能。
  協議:爲了進行網絡中的數據交換而建立的約定,協議是爲了保證通信的安全,不同層的協議是完全不同的。
   TCP協議:傳輸層的協議,重發一切錯誤的信息
   IP協議:保證地址和主機一一對應(ip地址+網卡地址)
   
 TCP編程:
  TCP是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信,當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。
   1) 服務器分配一個端口號,服務器使用accept()方法等待客戶端的信號,信號一到打開socket連接,從socket中取得OutputStream和InputStream。
      2) 客戶端提供主機地址和端口號使用socket端口建立連接,得到OutputStream和InputStream。

  Server端編碼的步驟:
   1、new ServerSocket 打開端口
   2、調ServerSocket的accept()等待客戶連接,當連接成功返回交互的Socket。
   3、調用Socket.getInputStream,getOutputStream獲得服務器端的IO流
   4、用處理流封裝後與客戶端交互,記住你讀我寫,一讀一寫。
   5、關閉單一客戶端調用Socket的close(),關閉服務器調ServerSocket的close();

  Socket端編碼步驟:
   1、new Socket(Server ip,Server port)試圖連接,如成功纔有對象
   2、調用Socket.getInputStream,getOutputStream獲得服務器端的IO流
   3、用處理流封裝後與客戶端交互,記住你讀我寫,一讀一寫。
   4、關閉,只有Socket的close()方法。

 

 

多線程+網絡:
  1、服務器端的等待客戶連接代碼( while(true) ),服務器端與單個客戶端交互的代碼放入線程體( run )
  2、客戶端如有其他要求,與服務器交互的代碼也要放入線程體
  3、ServerSocket和Socket編碼基於TCP/IP協議,重發一切錯誤數據,當網絡不好時會使性能很差
  4、Server端
   new ServerSocket啓動等待連接線程
   在accept後啓動交互線程
  注意:交互時注意對應產生,讀寫流對應和次數對應
  
 URL:網址,統一資源定位器
  常用的構造器:
   URL(String spec)
    spec  一個完整的網址(協議+網址)
             根據 String 表示形式創建 URL 對象。
             
 URLConnection:與網址進行連接
  通過URL的openConnection()方法生成一個URLConnection實例,通過下面兩個方法,進行流的操作
   getInputStream()
             返回從此打開的連接讀取的輸入流
            getOutputStream()
             返回寫入到此連接的輸出流。
             
 UDP編程:這種信息傳輸方式相當於傳真,信息打包,在接收端準備紙
  特點:
   1、一種無連接協議,速度快
   2、不保證數據的完整,不會進行重發
   
  DatagramSocket和DatagramPacket類:
   DatagramSocket:此類表示用來發送和接收數據報包的套接字。
   DatagramPacket:數據報包,是UDP下進行傳輸數據的單位,數據存放在字節數組中,其中包括了目標地址和端口以及傳送的信息。
    用於接收: 
     DatagramPacket(byte[] buf , int length)
    用於發送: 
     DatagramPacket(byte[] buf , int length , InetAddress address , int port )
     
  UDP發送端:
   1、創建一個DatagramSocket,不需要參數
   2、創建一個DatagramPacket,指明接收方的IP地址和端口號
   3、發送數據send(DatagramPacket p)
   4、關閉DatagramSocket

  UDP接收端:
   1、創建一個DatagramSocket,指定接收方的IP地址和端口號
   2、創建一個DatagramPacket,不需要IP地址和端口號
   3、接收數據receive(DatagramPacket p)
   4、關閉DatagramSocket
   
常用類庫:
 java.lang.*:
  System 系統
  Object 對象
   clone()
   equals()
   hashCode()
   toString()
  Class  類   
  String/StringBuffer/StringBuilder  與字符串相關的
  Thread 線程
  所有的封裝類

 java.util.*:
  Set--->HashSet,TreeSet   
  List--->ArrayList 
  Map--->HashMap(線程安全,不支持空),HashTable(線程不安全,支持空)
  Collections--->外同步
  Properties
  Date
  觀察者-->Observable,接口Observer
  數據結構+工具類

 java.sql.*: 後面馬上會講到,JDBC
 
 java.awt/swing.*:沒什麼機會用到
  
 java.io.*:  流相當的多
  File/FilenameFilter
  Serializable 對象序列化接口

   注意:寫一個類要考慮的事情:1、無參構造器,2、實現序列化接口,3、重寫equals,hashCode
  
  FileInputStream
  FileOutputStream
  InputStreamReader
  PrintStream
  BufferedReader
  nio包
 
 java.net.*:  以後JSP,Servlet用的時候這個包都已經寫好了
  InetAddress--->IP地址
  URL----------->網址
  URLConnection---->連接
  ServerSocket,Socket----TCP/IP
  DatagramSocket,DatagramPacket----UDP
  
 一些零散的類:
  Comparable(可比較的),Comparator(比較器)

  java.math.*;數字在商業軟件中應用時找這個包
   BigDecimal
  
  與反射相關的:java.lang.reflect:  用的機會比較少
     
  Runtime(運行環境),Process(進程) ,這兩個在java.lang包裏,用了這些就不能跨平臺了,而且效率低

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章