java實現基於TCP形式的socket程式設計示例
阿新 • • 發佈:2019-01-13
一,介紹
socket程式設計也叫套接字程式設計是位於應用層,一臺機器上的Socket與另一臺機器上的Socket聯接就會建立一條通訊通道。Java語言通過流為程式碼提供資料,從而隱藏了所有這些細節,所以被稱為流套接字。套接字有兩種形式:a.TCP:可靠的,端到端的位元組流通訊協議。是一種面向連線的協議。b.UDP:UDP提供了一種傳送封裝的原始IP資料報的方法,並且傳送時無需建立連線,是一種不可靠的連線。
二,TCP Socket 程式設計示例
客戶端端程式碼
package tcpsocket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) { // 客戶端參考程式碼 try { // 1.建立一個socket物件(指定伺服器IP,埠號) Socket socket = new Socket("localhost", 8000); // 2.獲取輸出流,用來寫出資料,而寫出的資料就通過網路傳送給服務端了。 OutputStream os = socket.getOutputStream(); String info = "使用者名稱:TOM,密碼:1234"; os.write(info.getBytes()); os.flush(); // 3單向關閉輸出流 // socket.shutdownOutput(); // 4.獲取輸入流,用來接收資料 InputStream is = socket.getInputStream(); byte[] b = new byte[1024]; int len = is.read(b); System.out.println("客戶端接收:" + new String(b, 0, len)); // 5.關閉流 os.close(); is.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
伺服器端程式碼
package tcpsocket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { /* * 執行在服務端的Socket * 作用是:申請服務埠,客戶端就是通過它申請的服務埠連線上服務端應用程式的 * */ ServerSocket serversocket = new ServerSocket(8000); // 2.監聽客戶端請求 System.out.println("伺服器正在等待連線...."); /* * ServerSocket.accept()作用: * 該方法是一個阻塞方法,用於監聽其開啟的8000埠,當一個客戶端通過該埠與 * 服務端連線時,accept方法就會解除阻塞,然後建立一個Socket例項並返回。這個 * Socket的作用就是與剛剛連上的客戶端進行通訊。 */ Socket socket = serversocket.accept(); // 3.開啟輸入流,接收資料 InputStream is = socket.getInputStream(); byte[] b = new byte[1024]; int len = is.read(b); System.out.println("伺服器接收:" + new String(b, 0, len)); // 4.單向關閉輸入流 // socket.shutdownInput(); // 5.開啟輸出流,傳送資料 OutputStream os = socket.getOutputStream(); String info = "歡迎您,登入成功!"; os.write(info.getBytes()); os.flush(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } // 6.關閉資源 is.close(); os.close(); socket.close(); serversocket.close(); } catch (IOException e) { e.printStackTrace(); } } }
三,執行結果
先執行伺服器端 Server
再執行客戶端 Client