Socket通信——服務器和客戶端相互通信


  所謂socket通常也稱作"套接字",用於描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。 
  Socket和ServerSocket類庫位於java.net包中。ServerSocket用於服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對於一個網絡連接來說,套接字是平等的,並沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。 
  下面給出一個最簡單的Socket通信的例子供初學者參考: 
服務器端:ServerDemo.java 

public class ServerDemo {  
    /** 
     * 注意:Socket的發送與接收是需要同步進行的,即客戶端發送一條信息,服務器必需先接收這條信息, 
     *      而后才可以向客戶端發送信息,否則將會有運行時出錯。 
     * @param args 
     */  
    public static void main(String[] args) {  
        ServerSocket ss = null;  
        try {  
            ss = new ServerSocket(8888);  
            //服務器接收到客戶端的數據后,創建與此客戶端對話的Socket  
            Socket socket = ss.accept();  
            //用於向客戶端發送數據的輸出流  
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());  
            //用於接收客戶端發來的數據的輸入流  
            DataInputStream dis = new DataInputStream(socket.getInputStream());  
            System.out.println("服務器接收到客戶端的連接請求:" + dis.readUTF());  
            //服務器向客戶端發送連接成功確認信息  
            dos.writeUTF("接受連接請求,連接成功!");  
            //不需要繼續使用此連接時,關閉連接  
            socket.close();  
            ss.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

客戶端:ClientDemo.java 

public class ClientDemo {  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        Socket socket = null;  
        try {  
            socket = new Socket("localhost",8888);  
            //獲取輸出流,用於客戶端向服務器端發送數據  
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());  
            //獲取輸入流,用於接收服務器端發送來的數據  
            DataInputStream dis = new DataInputStream(socket.getInputStream());  
            //客戶端向服務器端發送數據  
            dos.writeUTF("我是客戶端,請求連接!");  
            //打印出從服務器端接收到的數據  
            System.out.println(dis.readUTF());  
            //不需要繼續使用此連接時,記得關閉哦  
            socket.close();  
        } catch (UnknownHostException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM