java socket:客戶端與伺服器端通訊
阿新 • • 發佈:2018-12-12
Socket:網路上兩個程式通過一個雙向的通訊連線實現資料交換,連線的一段為一個socket,要實現兩個程式的資料交換一般要一對socket。 這個定義參考自百度百科,我覺得說的還不錯,另外,socket的英文有‘插口’的意思,其實也可以理解為程式的插口等等。 socket在實現程式通訊方面具有重要意義,我看到它出現在c/c++、java、python、c#等諸多語言中,看來學什麼語言都難逃此關。。 這裡我用了一個最簡單的socket客戶端與服務的通訊,對socket的基本過程做了初步的瞭解,在這裡記錄下程式碼,方便以後學習: 伺服器端:
import java.io.*; import java.net.*; import java.util.*; public class sever { public void sever(){ try{ //建立伺服器端的socket ServerSocket sk=new ServerSocket(12345); while(true){//伺服器無窮迴圈等待客戶端的請求 System.out.println("****伺服器已經啟動,等待客戶端連線...****"); //accept()在等待客戶端連線上來前保持閒置,當客戶端連線上來,返回一個socket以便與客戶端通訊,ServerSocket與socket埠不同,以便ServerSocket空出來等待與其它使用者通訊 Socket socket=sk.accept(); //利用PrintWriter寫入流 PrintWriter writer=new PrintWriter(socket.getOutputStream()); //在伺服器端由使用者鍵入字串 System.out.println("input:"); Scanner in = new Scanner(System.in); String s = in.nextLine(); //寫入流 writer.println(s); //關閉與socket的連線 writer.close(); } }catch(Exception ex){ ex.printStackTrace(); } } public static void main(String[] args){ sever myserver=new sever(); myserver.sever(); } }
客戶端:
import java.io.*; import java.net.*; public class client { public void go(){ try{ //建立客戶端的socket,服務端的ip,客戶端連線的埠號 Socket socket=new Socket("localhost",12345); //建立連線到socket的底層輸入串流 InputStreamReader streamreader=new InputStreamReader(socket.getInputStream()); //建立BufferedReader讀取輸入串流 BufferedReader reader=new BufferedReader(streamreader); //度取結果給字串 String advice=reader.readLine(); //客戶端顯示讀取的結果 System.out.println(advice); //關閉BufferedReader reader.close(); }catch(Exception ex){ ex.printStackTrace(); } } public static void main(String[] args){ client myclient=new client(); myclient.go(); } }
執行效果:在伺服器端輸入hello,客戶端接收並顯示: