【Java】Java Socket 通信示例

用socket(套接字)實現客戶端與服務端的通信。

這裏舉兩個例子:

第一種是每次客戶端發送一個數據,服務端就做一個應答。(也就是要輪流發)

第二種是客戶端可以連續的向服務端發數據,服務端也可以連續向客戶端發數據。(多線程)


爲了方便起見,客戶端服務端都放在一個主機上,分別開兩個進程[哈哈,進程間通信lol~]


PS: 一個聊天程序雛形

代碼也放在GitHub上了:https://github.com/MummyDing/socketChatDemo


Demo 1:

簡單的Socket通信,一人一句話就結束了(要一直說加個循環就好)

客戶端

/**
Client
Author :MummyDing
*/
import java.lang.Runnable; 
import java.io.*; 
import java.net.*;
class clientConnect{
	 	Socket client = null;
        BufferedReader inputData = null;   
        PrintWriter outputData = null;
        String receiveData ,sendData ;

        clientConnect(){
        	 try {
            client = new Socket("127.0.0.1", 5234);  
            dealData();
            }
        	catch (Exception e) {
        		System.out.println("I cann't Connect!");
            	System.exit(1);
        	}
    	} 
    	void dealData(){
    		try{
    		outputData = new PrintWriter(client.getOutputStream(), true);
    		inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); 
             
 			 sendMsg();
 			 receiveMsg();	
    		}catch (Exception e) {
    			System.out.println("Error ~");
    		}
    		 
    	}
    	void sendMsg(){
    		outputData.println("Hello Server");
    	}
    	void receiveMsg(){
    		try{
    		receiveData =  inputData.readLine(); 
    		System.out.println("Server said "+receiveData);  	
    	}catch (Exception e) {
    		System.out.println("Error");
    	}
    		
    	}
}
public class Client  {
	public static void main(String[] args) { 
		clientConnect connecte = new clientConnect();  
	}
}


服務端:


/**
Server
Author :MummyDing
*/
import java.lang.Runnable; 
import java.net.*;
import java.io.*;
class serverConnect {
		ServerSocket serverSocket = null; 
		Socket clientSocket = null;
		String receiveData,sendData;
		serverConnect(){
			try {
        	serverSocket = new ServerSocket(5234);
        	clientSocket = serverSocket.accept();
        	dealData(); 
        }
        catch (Exception e) {  
        	System.out.println("Server Bulid Error");
        	System.exit(1);
        }
		}
		void dealData(){
			try{
			PrintWriter outputData = new PrintWriter(clientSocket.getOutputStream(), true);
			BufferedReader inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			receiveData = inputData.readLine();  
			System.out.println("Client say:"+ receiveData);
			outputData.println("Ha ha , I got your info: "+receiveData);  
			}catch (Exception e) {
				System.out.println("Error!");
			}
		}
}
public class Server{
	public static void main(String[] args) { 
		serverConnect connecte = new serverConnect();		 
	}
}


Demo 2:


在Demo 1的基礎上進行了該進,實現了一人可以連續說幾句話。(多線程)


客戶端:

/**
Client
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable; 
import java.io.*; 
import java.net.*;
class clientConnect{
	 	Socket client = null;
        BufferedReader inputData = null;   
        PrintWriter outputData = null;
        String receiveData ,sendData ;
        clientConnect(){
        	 try {
            client = new Socket("127.0.0.1", 5234);  
            dealData();
            outputData.println("OK");
            }
        	catch (Exception e) {
        		System.out.println("I cann't Connecte!");
            	System.exit(0);
        	}
    	} 
    	void dealData(){
    		try{
    		outputData = new PrintWriter(client.getOutputStream(), true);
    		inputData = new BufferedReader(new InputStreamReader(client.getInputStream())); 
    		}catch (Exception e) {
    			System.out.println("Error ~");
                System.exit(0);
    		} 
    	}
    	String sendMsg(){
            Scanner sc = new Scanner(System.in);
            sendData = sc.nextLine();
    		outputData.println(sendData); 
            outputData.flush();
            System.out.println("I say:"+ sendData);
            return sendData;
    	}
    	boolean receiveMsg(){
    		try{
    		receiveData =  inputData.readLine(); 
            if(receiveData.equals("shutdown")) return false;
    		System.out.println("Server said "+receiveData);  	
    	    }catch (Exception e) {
    		  System.out.println("Error");
              System.exit(0);
    	    }	
            return true;
    	}
}
public class Client  {
	public static void main(String[] args) {
		clientConnect connect = new clientConnect();
		Thread t = new Thread(new Runnable(){
            public void run(){
               while(true){
                connect.dealData();
                if(connect.receiveMsg() == false){
                    System.out.println("SHUTDOWN!!!");
                    System.exit(0);
                }
                }
            }
        });
       t.start();
        while(connect.sendMsg().equals("shutdown") == false){ 
        }
        System.exit(0);
	}
}



服務端:


/**
Server
Author:MummyDing
*/
import java.util.Scanner;
import java.lang.Runnable; 
import java.net.*;
import java.io.*;
class serverConnect {
		ServerSocket serverSocket = null; 
		Socket clientSocket = null;
		String receiveData,sendData;
		PrintWriter outputData ;
		BufferedReader inputData;
		serverConnect(){
			try {
        	serverSocket = new ServerSocket(5234);
        	clientSocket = serverSocket.accept();
        }
        catch (Exception e) {  
        	System.out.println("Server Bulid Error");
        	System.exit(1);
        }
		}
		void dealData(){
			try{  
			 outputData = new PrintWriter(clientSocket.getOutputStream(), true);
			 inputData = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			}catch (Exception e) {
				System.out.println("Error!"); 
				System.exit(0);
			}
		}
		boolean receiveMsg(){
			try{
				receiveData = inputData.readLine(); 
				if(receiveData.equals("shutdown")) return false ;
				System.out.println("Client say:"+ receiveData);
			}catch (Exception e) {
				System.out.println("receive Error~");
				System.exit(0);
			}
			return true;
		}
		String sendMsg(){
			Scanner sc = new Scanner(System.in); 
			sendData = sc.nextLine(); 
			outputData.println(sendData);  
			outputData.flush();
			System.out.println("I say:"+ sendData);
			return sendData;
		}
}
public class Server{
	public static void main(String[] args) {
		serverConnect connect = new serverConnect();
		Thread t  = new Thread(new Runnable(){
			public void run(){
				while(true){
				connect.dealData();
				if(connect.receiveMsg() == false){
                    System.out.println("SHUTDOWN!!!");
                    System.exit(0);
                }
				}
			}
		});
		t.start();
		while(connect.sendMsg().equals("shutdown") == false){
		}
		System.exit(0);
	}
}


--------------------------------------------------

期間犯了一個很二的錯誤,客戶端和服務端裏面用了"同名類",這就導致後編譯的把前面的"同名類"覆蓋掉了。

完整代碼: https://github.com/MummyDing/socketChatDemo
【轉載請註明出處】

作者:MummyDing

出處:http://blog.csdn.net/mummyding/article/details/46445675



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章