• JAVA NIO 原理探秘 --- Socket


    JAVA NIO 原理探秘 --- Socket

     一、ServerSocket 和 Socket

       对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。

           对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看服务端与客户端通信的例子:

      服务端代码

    package net.qh.test.socket;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.nio.charset.Charset;
    
    /**
     * Created by Administrator on 2016/03/17.
     */
    public class MySocketServer {
    
    
        public static void main(String[] args) throws IOException {
    
            ServerSocket serverSocket = new ServerSocket(1101);
            while(true){
                /**
                 * serverSocket.accept()方法是监听链接的建立: 如果发现有一个Socket尝试连接,ServerSocket会接收这个链接,返回一个socket实例。
                 * 该方法是会一直阻塞,直到接收到一个连接。
                 * */
                Socket socket = serverSocket.accept();
                InputStream inputStream = socket.getInputStream();
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write("连接已经建立...".getBytes(Charset.forName("utf-8")));
                outputStream.flush();
                byte[]  bytes = new byte[1024];
    
                inputStream.read(bytes,0,bytes.length);
                String msg = new String(bytes,"utf-8");
                System.out.print("msg:"+msg);
            }
        }
    
    
    }
    

      客户端代码

      

    package net.qh.test.socket;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /**
     * Created by Administrator on 2016/03/17.
     */
    public class MySocketClient {
    
        public static void main(String[] args) throws IOException, InterruptedException {
            Socket socket = new Socket("127.0.0.1",1101);
    
            OutputStream outputStream = socket.getOutputStream();
            InputStream inputStream = socket.getInputStream();
    
            /**
             * inputStream.read()从输入流中读取字节,保存在缓冲区中。
             * 该方法将会阻塞,直到读取到数据、读取到文件结尾、发生异常
             * */
            byte[]  bytes = new byte[1024];
            String recMsg = "";
            inputStream.read(bytes,0,bytes.length);
            recMsg += new String(bytes,"utf-8");
            System.out.println("recMsg:" + recMsg);
    
            String msg = "你好 ......";
            outputStream.write(msg.getBytes("utf-8"));
            Thread.sleep(5000);
    
        }
    
    
    }
    

      

  • 相关阅读:
    2022.05.31软件更新公告
    为什么不网购方便面
    js localStorage
    uniapp上拉加载更多功能的简单实现
    Centos 系统 软raid 0 实现
    使用vscode调试ros
    wget 命令用法
    是否应该提前还房贷
    mybatis generator 自动生成的拼装sql分析
    动态样式+模板字符串
  • 原文地址:https://www.cnblogs.com/aDiot/p/5288199.html
Copyright © 2020-2023  润新知