• 【Java】Java Socket 通信演示样例


    用socket(套接字)实现client与服务端的通信。

    这里举两个样例:

    第一种是每次client发送一个数据,服务端就做一个应答。

    (也就是要轮流发)

    另外一种是client能够连续的向服务端发数据,服务端也能够连续向client发数据。(多线程)


    为了方便起见,client服务端都放在一个主机上。分别开两个进程[哈哈,进程间通信lol~]


    PS: 一个聊天程序雏形

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


    Demo 1:

    简单的Socket通信。一人一句话就结束了(要一直说加个循环就好)

    client

    /**
    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:

    /**
    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);
    	}
    }


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

    期间犯了一个非常二的错误,client和服务端里面用了"同名类",这就导致后编译的把前面的"同名类"覆盖掉了。

    完整代码: https://github.com/MummyDing/socketChatDemo
    【转载请注明出处】

    作者:MummyDing

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



  • 相关阅读:
    在 tornado 中异步无阻塞的执行耗时任务
    django在nginx uwsgi和tornado异步方案在项目中的体验
    使用tornado让你的请求异步非阻塞
    转:Parameter Server 详解
    转:复杂网络分析总结
    从SDCard获取的图片按分辨率处理的方法
    胡振亮:原来这就是非常多站点百度权重做不上去的原因
    c语言函数---I
    [LeetCode] Single Number III
    hdu 5389 Zero Escape (dp)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7083235.html
Copyright © 2020-2023  润新知