zoukankan      html  css  js  c++  java
  • java 记录一下socket的server与client

    package com.test.server;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    
    import org.apache.log4j.Logger;
    
    public class Server{
    	
    	private static final Logger logger = Logger.getLogger(Server.class);
    
    	public static ServerSocket server = null;	
    	
    	static{
    		try {
    			server = new ServerSocket(5678);
    		} catch (IOException e) {
    			logger.error("Server set up error: ", e); 
    		}   
    	}
    	
    	public static void stop(){
    		if(server != null){
    			try {
    				server.close();
    			} catch (IOException e) {
    				logger.error("Server close error: ", e); 
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		Server.stop();
    	}
    	
    }
    
    package com.test.server;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.net.Socket;
    
    import org.apache.log4j.Logger;
    
    public class ServerThread implements Runnable {
    
    	private static final Logger logger = Logger.getLogger(ServerThread.class);
    
    	private Socket socket;
    
    	public ServerThread(Socket socket) {
    		this.socket = socket;
    	}
    
    	@Override
    	public void run() {
    //		 String line;
    		BufferedReader is = null;
    		Writer writer = null;
    		if (socket == null) {
    			logger.error("Server down!");
    			return;
    		}
    		StringBuilder sb = new StringBuilder();
    		try {
    			is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    			String temp;
    			int index;
    			temp = is.readLine();
    			System.out.println("line is: "+ temp);
    			while (temp != null) {
    				System.out.println(temp);
    				if ((index = temp.indexOf("eof")) != -1) {// 遇到eof时就结束接收
    					sb.append(temp.substring(0, index));
    					break;
    				}
    				sb.append(temp);
    				temp = is.readLine();
    			}
    			// logger.info(sb.toString());
    			System.out.println(sb.toString());
    			writer = new OutputStreamWriter(socket.getOutputStream());
    			writer.write("Hello Client.");
    			writer.write("eof
    ");
    			writer.flush();
    		} catch (IOException e) {
    			logger.error("Read information error: ", e);
    		} finally {
    			try {
    				if (is != null) {
    					is.close();
    				}
    				if (writer != null) {
    					writer.close();
    				}
    				if (socket != null) {
    					socket.close();
    				}
    			} catch (IOException e) {
    				logger.error("Close the IO session error: ", e);
    			}
    
    		}
    	}
    
    }
    
    package com.test.server;
    
    import java.io.IOException;
    import java.net.Socket;
    
    import org.apache.log4j.Logger;
    
    public class SocketServer {
    
    	private static final Logger logger = Logger.getLogger(SocketServer.class);	
    	
    	public void connect() {          
            try {                       
                while (true) {              	
                    Socket socket = Server.server.accept();  
    //                socket.getRemoteSocketAddress();
                    new Thread(new ServerThread(socket)).start();  
                }  
            } catch (IOException e) {  
            	logger.error("Server set up error: ", e);  
            }  
      
        } 	
    	
    	public static void main(String[] args) {
    		SocketServer ss = new SocketServer();
    		ss.connect();		
    	}
    
    }
    
    package com.test.client;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    import org.apache.log4j.Logger;
    
    public class SocketClient {
    
    	private static final Logger logger = Logger.getLogger(SocketClient.class);
    
    	public void client() {
    		Socket client = null;
    		BufferedReader is = null;
    		Writer writer = null;
    		try {
    			client = new Socket("172.16.13.41", 5678);
    
    			writer = new OutputStreamWriter(client.getOutputStream());
    			writer.write("Hello Server.");
    			writer.write("eof
    ");
    			writer.flush();
    
    			is = new BufferedReader(new InputStreamReader(client.getInputStream()));
    			StringBuffer sb = new StringBuffer();
    			String temp;
    			int index;
    			while ((temp = is.readLine()) != null) {
    				if ((index = temp.indexOf("eof")) != -1) {
    					sb.append(temp.substring(0, index));
    					break;
    				}
    				sb.append(temp);
    			}
    			// logger.info(sb.toString());
    			System.out.println(sb.toString());
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (is != null) {
    					is.close();
    				}
    				if (writer != null) {
    					writer.close();
    				}
    				if (client != null) {
    					client.close();
    				}
    			} catch (IOException e) {
    				logger.error("Close the IO session error: ", e);
    			}
    		}
    
    	}
    
    	public static void main(String[] args) {
    		SocketClient sc = new SocketClient();
    		sc.client();
    	}
    
    }
    
  • 相关阅读:
    react中实现滚动到指定位置固定显示导航栏,反之浸入背景
    activeElement解决ios滚动到底部显示内容时,键盘挡住显示内容的问题
    公积金无租房备案提取如何办理?(以成都为例)
    公积金状态封存怎么解封?
    你应该知道的公积金基础知识科普
    react antd表单不用form.create方法怎么设置input 回显值
    简述个人账户向公司账户转账的方法
    js拖拽进入和离开重复触发的问题
    Electron截屏功能
    Electron在mac下快捷键失效的问题及解决
  • 原文地址:https://www.cnblogs.com/zhangfei/p/4482022.html
Copyright © 2011-2022 走看看