socket編程 java
1,計算機進行通訊編程的基礎是有ip地址加端口號的主機惟一標示、有相應的一致的協議即tcp/ip。ip地址用來區分主機,端口號用來區分計算機上不一樣的應用軟件。編程
2,java提供的網絡功能主要有四大類 api
1)InetAddress類,封裝ip地址表明網絡上的硬件資源。 服務器
2)URL,統一資源定位符網絡
3)Sockets:使用tcp協議實現網絡通訊的Socket相關類 多線程
4)Datagram:使用udp協議,將數據保存在數據報中經過網絡進行通訊的相關類。併發
3,InetAddress類socket
該類須要經過靜態方法InetAddress.getLocalHost()獲得實例。 提供了獲得主機名,ip地址等的方法,具體可查api文檔。該類能夠獲得本地主機和遠程主機的相關硬件信息。tcp
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方法均爲阻塞式的。