Socket程式設計:本地通訊demo
阿新 • • 發佈:2018-11-12
伺服器建立:
package server; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class ServerLocal { public static void main(String[] args) throws Exception { //在本機8000埠上啟動服務 ServerSocket serverSocket = new ServerSocket(8000); System.out.println("伺服器已啟動"); //等待客戶端傳送請求並建立連線通道 Socket serverSocket1 = serverSocket.accept(); System.out.println("客戶端已連線"); //建立輸入流 InputStream in = serverSocket1.getInputStream(); //建立輸出流 OutputStream out = serverSocket1.getOutputStream(); //依次接收5個字元 for(int i=0;i<5;i++) { char c = (char)in.read(); System.out.print(c); } //傳送5個字元 out.write("world".getBytes()); out.flush(); serverSocket.close(); serverSocket1.close(); } }
客戶端建立:
package client; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class ClientLocal { public static void main(String[] args) throws Exception { //建立地址為127.0.0.1,埠為8000的套接字 Socket clientSocket = new Socket("127.0.0.1",8000); //通過套接字獲取輸入流 InputStream in = clientSocket.getInputStream(); //通過套接字獲取輸出流 OutputStream out = clientSocket.getOutputStream(); //輸出hello out.write("hello".getBytes()); //刷出所有字元 out.flush(); for(int i=0;i<5;i++) { //迴圈讀取服務端發出的資料 char c =(char)in.read(); System.out.print(c); } //斷開連線 clientSocket.close(); } }
測試:
先啟動伺服器:
伺服器已啟動
再啟動客戶端:
客戶端控制檯輸出:
world
伺服器控制檯輸出:
伺服器已啟動
客戶端已連線
hello
總結:
進行socket程式設計時,伺服器端需要根據埠建立服務,然後通過accept()方法獲取套接字並與客戶端建立連線;客戶端需要根據要連線的伺服器ip和埠號建立套接字。通過套接字,我們可以獲取輸入輸出流,通過輸入輸出流即可進行資料的互動。