Java中使用Socket(即套接字)完成TCP程序的開發
服務器端使用ServerSocket接收客戶端的連接請求,每一個客戶端都使用一個Socket對象表示
在服務器端每次運行時都要使用accept()方法等待客戶端連接,此方法執行后,服務端將進入阻塞狀態,直到客戶端連接之后,程序才可以向下繼續執行。每一個Socket都表示一個客戶端對象
在客戶端,程序可以通過Socket類的getInputStream()方法取得服務器的輸出信息,在服務器端可以通過getOutputStream()方法取得客戶端的輸出信息
在網絡程序中,要使用輸入及輸出流的形式完成信息的傳遞。
實例:
1、服務器的程序,向客戶端輸出“Hello World”
package Socket; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class HelloServer { public static void main(String[] args) throws Exception { ServerSocket server =null; Socket client=null;//一個socket對象表示一個客戶端 PrintStream out=null;//聲明打印流對象,以向客戶端輸出 server=new ServerSocket(8888);//此時服務器在8888端口等待客戶端的訪問 System.out.println("服務器運行,等待客戶端連接"); client=server.accept();//程序阻塞,等待客戶端連接才能繼續往下走 String str="Hello World"; out=new PrintStream(client.getOutputStream());//實例化打印流對象,輸出信息 out.println(str); out.close(); client.close(); server.close(); } }
2、客戶端的程序,接受服務器輸出的內容
package Socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class HelloClient { public static void main(String[] args) throws Exception { Socket client=null;//聲明Socket對象 client=new Socket("localhost",8888);//指定連接的主機和端口 BufferedReader buf=null; buf=new BufferedReader(new InputStreamReader(client.getInputStream()));//取得客戶端的輸入流 String str=buf.readLine(); System.out.println("服務器端輸出內容:"+str); client.close(); buf.close(); } }
服務端只有一個accept(),接收一次連接請求之后,就會關閉,實際應用中當然是循環接收請求