• java基础之Socket编程概述以及简单案例


    概述:
      用来实现网络互连的 不同的计算机上 运行的程序间 可以进行数据交互  也就是用来在不同的电脑间, 进行数据传输.

     

    三大要素:
      IP地址: 设备(电脑,手机,ipad)在网络中的唯一标识.
        组成: 网络(网关)号码 + 主机地址. //192.168.162.86
        分类:
          城域网: 1 + 3
          广域网: 2 + 2
          局域网: 3 + 1 //192.168.0. + 1

      两个特殊的IP:
        127.0.0.1: 本地回环(回路)地址, 在哪台电脑上写这个ip, 它就标识哪个电脑.
        255.255.255.255: 广播地址.


      String类型字符串和IP互相转换:

            //字符串IP    -->  IP地址对象
            InetAddress inet = InetAddress.getByName(ip);//IP地址对象        -->        String类型的ip
            String ip2 = inet.getHostAddress();


    端口号:

      程序在设备(电脑,手机,ipad)上的唯一标识  范围: 0 ~ 65535

      注意事项:
        其中0~1024号段已经被占用了或者用作保留端口, 我们自定义端口号的时候要避开这个范围.

     

    协议:     //设备间进行数据交互的 规则.
      UDP协议:
        1. 不需要建立连接.
        2. 采用数据报包的形式发送数据, 每个包的大小不能超过64KB.
        3. 不安全(不可靠)协议.
        4. 效率相对来讲较高.
        5. 不区分客户端和服务器端, 叫: 发送端和接收端.

      TCP协议:
        1. 需要建立连接

          三次握手: 1)客户端给服务端发送消息要连接服务端

                2)服务端通过验证后给客户端发送消息允许连接

                3)建立连接通道
        2. 采用IO流发送数据, 理论上来讲数据没有大小限制.
        3. 安全(可靠)协议.
        4. 效率相对来讲较低.
        5. 区分客户端和服务器端.

    Socket编程(网络通信)的原理:
      通信两端都独有自己的Socket的对象,
      数据在两个Socket之间通过 数据报包或者IO流的形式进行 传输


    简单案例客户端和服务端互发消息:

    Client:

    public class Client {
        public static void main(String[] args) throws Exception {
            Socket soc = new Socket("192.168.1.102", 10010);
            // 发送
            OutputStream os = soc.getOutputStream();
            os.write("客户端:我是刘德华".getBytes());
            // 接收
            InputStream is = soc.getInputStream();
            byte[] bys = new byte[1024];
            int len = is.read(bys);
            System.out.println(new String(bys, 0, len));
            soc.close();
        }
    }

    Server:

    public class Server {
        public static void main(String[] args) throws IOException {
            ServerSocket ssoc = new ServerSocket(10010);
            //监听
            Socket accept = ssoc.accept();
            //接收
            InputStream is = accept.getInputStream();
            byte[] bys = new byte[1024];
            int len = is.read(bys);
            //接收到数据
            System.out.println(new String(bys, 0, len));
            
            //反馈
            
            OutputStream os = accept.getOutputStream();
            os.write("服务端:我是张学友啊".getBytes());
            ssoc.close();
        }
    }
  • 相关阅读:
    前端线上项目汇总
    gulp构建工具学习汇总
    ES6知识点汇总
    页游技术点汇总中
    前后端方案汇总
    vim常用命令
    互联网哲学
    js调试技巧汇总中
    windows下Docker安装MySQL
    RabbitMQ几个常用面试题
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9153524.html
Copyright © 2020-2023  润新知