• socket 简单了解


    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
     
    建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
     
    所以需要
    服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
    客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
     
    搭建客户端 单方向
    //客户端
    public class Client {
    
        public static void main(String[] args) throws Exception {
            // 要连接的ip和端口,并监听ip和端口 两个端口需一样
            Socket sk = new Socket("192.168.60.1", 49154);
            // 建立连接后获得输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
            String line;
            // 循环给line添加值
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
                bw.flush();
                InputStream is = sk.getInputStream();
                byte[] by = new byte[1024];
                int num = is.read(by);
                // by一口气传输多少字节 0 num 等于有多少字节
                String h = new String(by, 0, num);
            }
            br.close();
            bw.close();
            sk.close();
    
        }
    //服务端
    public class Server {
        public static void main(String[] args) throws Exception {
            // 监听指定的端口 端口号最好从49152到65535之间
            ServerSocket sk = new ServerSocket(49154);
            // sk将一直等待连接的到来
            Socket s = sk.accept();
            // 建立好连接后,从Socket中获取输入流,并建立缓冲区进行读取
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
            // line 等于客户端添加的内容 如果不添加会一直在 Socket s = sk.accept()等待到来
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println("服务端 	" + line);
            }
            // 释放资源
            s.close();
            sk.close();
    
            /*
             * BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null,
             * 但如果client的socket末经关闭就销毁, 则会产生IO异常.
             * 正常的方法就是使用socket.close()关闭不需要的socket.
             */
    
        }
  • 相关阅读:
    Jenkins配置国内镜像源
    Centos7安装Jenkins
    IDEA端口占用问题
    dsPIC33F配置ADC软件触发轮询与采样中断的注意事项与区别
    stm32cubemx生成HRTIM DAC等代码及注意事项
    TMS320F28335下载程序到Flash相关问题
    Tms320F28335中AD采样存储地址问题记录
    MatlabR2018a出现“Licence Manager Error -8”
    system级别配置php-开机自启方式
    《费曼学习法》笔记摘要
  • 原文地址:https://www.cnblogs.com/liehuonanjue/p/8686824.html
Copyright © 2020-2023  润新知