socket編程
1,計算機進行通信編程的基礎是有ip地址加端口號的主機唯一標示、有相應的一致的協議即tcp/ip。ip地址用來區分主機,端口號用來區分計算機上不同的應用軟件。
2,java提供的網絡功能主要有四大類
1)InetAddress類,封裝ip地址代表網絡上的硬件資源。
2)URL,統一資源定位符
3)Sockets:使用tcp協議實現網絡通信的Socket相關類
4)Datagram:使用udp協議,將數據保存在數據報中通過網絡進行通信的相關類。
3,InetAddress類
該類需要通過靜態方法InetAddress.getLocalHost()得到實例。 提供了得到主機名,ip地址等的方法,具體可查api文檔。該類可以得到本地主機和遠程主機的相關硬件信息。
4,URL類
類似這種的字符串叫url,利用該類可以得到url中的各種詳細信息,見代碼:
5,Socket類和ServerSocket類實現tcp連接
基本原理是通過ServerSocket啟動監聽程序,Socket發起請求建立連接,並通過綁定在兩個對象上的InputStream,OutputSteam流來交換數據。
練習實例思路:
1)建立服務器端監聽程序並綁定端口,ServerSocket serverSocket = new ServerSocket(8888); 循環監聽程序,若有accept() 方法監聽到客戶端連接,建立socket連接,並啟動響應線程。
2)建立客戶端程序,向服務器發送連接請求。Socket socket=new Socket("localhost", 8888);得到此socket上的輸出流,並封裝成打印流,向服務器發送字符消息。
3)編寫服務器端響應的多線程處理程序ServerThread,此類為自己編寫非api,使用服務端建立的套接字通道,接收客戶端數據,並根據內容回復。
總結: 1)ServerSocket的accept方法得到連接后返回一個Socket對象,即為對等客戶端的連接通道。服務端會有很多Socket對象。
2)服務器端需要一個實現多線程的處理類,來並發的處理多個客戶端的請求。
3)代碼詳見程序。
6,通過DatagramPacket、DatagramSocket類實現UDP通信。
其中DatagramPacket表示udp通信的數據報類,通過構造方法可以將通信信息和要發送的地址保存到類中;DatagramSocket表示一次端到端的通信,傳入DatagramPacket信息,DatagramSocket的send方法表示發送。receive方法表示接收,並且是阻塞式的在得到數據報發入前不會進行任何操作!
7,整體總結
1)不管是tcp還是udp服務器端肯定需要多線程,要注意設置線程優先級提高性能。
2)tcp中,關閉了socket中的輸出流,則socket也關閉了,因此,可在連接中不關流,在確定沒有輸出輸入的時候再關閉socket;
3)可不傳輸字符串,而使用ObjectInputStream和ObjectOutputStream傳輸對象
4)結合io流的基本用法,可以用通訊類在不同的機器間發送文件。
5) 兩個協議實現中receive方法和accept方法均為阻塞式的。