• 聊聊、Java 网络编程


      Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一。Java 网络编程又包括 TCP、UDP,URL 等模块。TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块。URL 对应 URL 模块。其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议。两者之间的异同就不在这里说了,推荐一本入门书籍 《TCPIP入门经典》。我们开始 Socket 服务端和客户端编程吧。

     一、【Socket 服务端】

      

    package www.rockcode.com.tnetty.server;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * @author xums
     * SocketServer
     * TODO
     * 2017年5月4日-上午11:07:49
     */
    public class SocketServer {
    
    	public static void main(String[] args) {
    		
    		SocketServer server = new SocektServer();
    server.init(); } public void init(){ ServerSocket serverSocket = null; Socket socket = null; BufferedReader br = null; PrintWriter pw = null; try { serverSocket = new ServerSocket(9999); socket = serverSocket.accept(); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(socket.getOutputStream()); String msg = br.readLine(); while(null!=msg){ System.out.println("收到消息:"+msg); msg = br.readLine(); } } catch (IOException e) { e.printStackTrace(); }finally{ if(null!=pw){ pw.close(); } if(null!=br){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if(null!=socket){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

      

     二、【Socket 客户端】

    package www.rockcode.com.tnetty.client;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    
    /**
     * @author xums
     * SocketClient
     * TODO
     * 2017年5月4日-上午10:47:20
     */
    public class SocketClient {
    	
    	public static void main(String[] args) {
    		
    		SocketClient client = new SocketClient();
                    client.init();
    
    	}
    
    		
    	public void init(){
    		Socket socket = null;
    		BufferedReader br = null;
    		PrintWriter pw = null;
    		try {
    			socket = new Socket();
    			socket.connect(new InetSocketAddress(9999), 5000);
    			socket.setKeepAlive(true);//默认false
    			
    			if(socket.isConnected()){
    				
    				br = new BufferedReader(new InputStreamReader(System.in));
    				pw = new PrintWriter(socket.getOutputStream(),true);//如果第二个参数不选择 true 或者 只选一个参数,那么发完消息要记得 flush()
    				String msg = "";
    				
    				while(true){
    					
    					boolean alive = socket.getKeepAlive();//判断服务端是否在线
    											
    					if(!alive){
    						throw new Exception("服务端不在线!");
    					}else{
    						msg = br.readLine();
    						if(null!=msg){
    							System.out.println("发送消息:"+msg);
    							pw.println(msg);
                                                            //pw.flush();
    						}
    					}
    				}
    				
    			}
    			
    		} catch (Exception e) {
    			System.out.println(e.getMessage());
    		}finally{
    			if(null!=pw){
    				pw.close();
    			}
    			
    			if(null!=br){
    				try {
    					br.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			
    			if(null!=socket){
    				try {
    					socket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			
    		}
    	}
    	
    }
    
    
    

      Socket 编程是必须熟悉的知识点,即使现在有不少的开源通信框架出现,例如 Mina、Netty、Cindy 等等。现在商业上用的最多还是 Netty,从最原始的 Java IO 到 Java NIO,再到 Java AIO,再到 Netty 等。其底层离不开 Socket ,所有技术的更新和不断发展都是背后业务在驱动。人们追求高效率,高速度,高质量的通信,促使开源框架日新月异。关于开源通信框架以后再讲,和大家一起学习,谢谢大家观看!

     

    
    

      

  • 相关阅读:
    2、MapStruct 深入理解
    1、MapStruct的应用
    Spring中的注解
    java中的三个内置注解
    依赖注入集合属性
    List Set Map的特点
    为类类型的属性依赖注入值
    java常用专业术语
    Bean的作用域范围
    Bean的生命周期
  • 原文地址:https://www.cnblogs.com/xums/p/6828446.html
Copyright © 2020-2023  润新知