服務器和客戶端Socket單向通信例子


看了兩天socket通信,也參考了網上其他人是怎么寫的。

下面我把最簡單的socket例程貼出來

server代碼:

public class Server {

    private static int port = 8888;  
    private static ServerSocket serverSocket;  
    private static Socket socket;
    
    public static void main(String args[]) throws IOException {  

        serverSocket = new ServerSocket(port, 2);  
        socket = serverSocket.accept();  
        System.out.println("客戶端已鏈接");  
          
        DataInputStream dis = new DataInputStream(socket.getInputStream()); 
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        dos.writeUTF("來自服務器的消息");
        
        while (true){  
            /*
            //讀取客戶端發送的信息
            String str = dis.readUTF();
            System.out.println("From 客戶端:"+str);
            
            if(str.equals("bye")){  
                socket.close();  
                serverSocket.close();  
                break;  
            }  
            */
            // 發送鍵盤輸入的一行    
             String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
             dos.writeUTF(s);
        }   
    }  
}

Client代碼:

public class Client {

    private static int port = 8888;  
    private static String host = "localhost";  
    private static Socket socket;  
    
    public static void main(String args[]) throws UnknownHostException,  
            IOException {  
        socket = new Socket(host, port);  
        
        DataInputStream dis = new DataInputStream(socket.getInputStream()); 
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        dos.writeUTF("來自客戶端的消息");
        
        while(true){  
            //讀取服務器發送的信息
            String str = dis.readUTF();
            System.out.println("From 服務器:"+str);
            
            if(str.equals("bye")){  
                socket.close();  
                System.out.println("關閉socket");  
                break;  
            } 
            // 發送鍵盤輸入的一行    
            //String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
            //dos.writeUTF(s);
        }     
    } 
}

 

因為readLine()是一個阻塞函數,接收不到消息會阻塞在那里。如果把兩個文件中的注釋去掉后,服務器和客戶端必須你一句我一句,才能正常通信。目前還沒有解決辦法。
所以,先實現單向通信:server發送數據,client接收數據。

 


免責聲明!

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



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