zoukankan      html  css  js  c++  java
  • Java 基础高级2 网络编程

    1.协议的概念:通信双方事先约定好的通信规则

    2七层网络通信协议;应用成,表示层,会话层,传输层,网络层,数据链路层

    3.TCP/IP协议:点对点通信,三层握手,安全有保证

    4。UDP协议;广播协议,不保证数据安全但很高效

    5.重要APl:InetAddress类,URl类,ServerSocked类,DatagramSocket类

    6.网络编程主要有两部分:一是获取管理socket连接,二是获取使用输入输出流传输数据

    1.网络模型介绍

    OSI参考模型                   TCP/IP参考模型

    应用层                              应用层

    表示层                       

    会话层

    传输层                               传输层

    网络层                               Internet层

    数据链路层           

    物理层                                网络接口层

    TCP/IP协议组

    HTTP FTP SMIP DNS RPC SNM

    TCP                       UDP

    RARP  IP              IGMP ICMP

    以太网   令牌环             帧中  ATM

     

    网络通讯要素:IP地址,端口号,传输协议

     2.网络通讯要素1-IP地址

     ip计算机唯一标识

    端口号每台计算机应用程序的隔离

    传输协议:通讯的规则

    IP地址;网络中设备的标识

    ip不方便记忆,使用主机名

    本地回环地址;127.0.0.1 主机名localhost

    2的10次方,小于255

    IP也是一个类java.net下的InetAddress

    里面没有构造函数,不能通过new来创建对象

    3.网络通讯要素2-端口

    端口号;用于标识进程的逻辑地址

    有效端口0~65535,其中0~1024被系统使用或保留端口

    某一个数据传给某一个进程,

    能上网不能聊QQ,通过防火墙软件,把QQ相应数据传输端口被禁用了,就不能 发送和接收信息了

    端口号是进程的唯一标识,如果QQ和飞秋是同一个端口,可以同时接收到一个信息

    4.网络通讯要素3-传输协议

     通讯的规则

    常见协议TCP.UDP

    传输层:TCP 和UDP

    UDP

    不需要建立连接,将数据及源和目的封装到数据包中,不需要源和目的进行连接

    每个数据包的大小限制在64kb

    因无连接,是不可靠协议:咱们发送的数据不知道对方是否接受到

    不需要建立连接,效率相对快

    TCP

    建立连接,形成传输数据的通道

    在连接中进行大数据量的传输,没有限制,基于通道,任意发送

    通过三次握手完成确认连接,是可靠协议。连接已经建立,通话可靠,确认通道连接正常

    必须建立连接,效率会降低

     5. Socket(套接字)

    Socket就是为网络服务提供的一种机制

    通信的两端都有Socket

    网络通讯其实就是Socket通信

    数据在两个Socket件传输,数据传输IO流

    网络编程步骤(Socket编程)

    客户端

    建立网络连接(指定iP地址和端口号),建立Socket服务,基于Socket服务器进行数据传输

    交换数据(请求响应模型)

    关闭连接,释放资源

    服务器端

    监听端口,当客户端发送数据时,有端口进行接收

    获得连接(被动),等待客户端连接

    交换数据,基于客户端请求,创建Socket服务

    关闭连接

    6. UDP发送端开发

    发送端

    1.建立UDP的Socket服务

    DatagramSocket socket=new DatagramSocket();

    2.封装数据包

    byte[] data="开始UDP之旅".getByte();

    DatagramPacket packet=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);

    3.通过socket的send()发送数据

    socket.send(packet);

    4.关闭资源

    socket.close();

     7. UDP接收端开发

    接收端

    1.建立udp的socket服务器,必须指定端口

    DatagramSocket socket=new DatagramSocket(10000);

    2. 定义数据包用于接收数据

    byte[] data=new byte[1024];

    DatagramPacket packet=socket.receive(buf,buf.length)

    3.通过socket的receive()方法,把数据接收到packet包中

    socket.receive(packet);

    4.通过packet的相应方法获取数据

    packet.getData(); getAddress();...

    String content=new String(packet.getData(),0.packet.length)

    5.关闭资源

    socket.close();

     8. UDP聊天程序开发

     UDP发送端

    // 1. 创建udp的Socket服务,可指定端口,可不指定,开通一个任意的执行端口
      DatagramSocket socket = new DatagramSocket();// 不需要指定端口,因为只需要一个端口把数据发送出去就行
      // 2.提供相应的发送信息,封装数据包,自己构造包,某个ip和端口上(字节数组,ip,端口)
      // 2.1动态发送数据,可以通过一个服务多次发送,多次接收
      Scanner scanner = new Scanner(System.in);// 键盘录入是system.in
      while (scanner.hasNext()) {// 判断是否录入结束
       byte[] data = scanner.nextLine().getBytes();// 字节数组
       DatagramPacket packet = new DatagramPacket(data, data.length,
         InetAddress.getLocalHost(), 888);
       // 3.调用Socket服务的发送方法send,进行信息的发送
       socket.send(packet);
      }

    UDP接收端

    // 1.创建socket服务,必须指定端口和发送端相同的端口,发送主机相同的端口
      DatagramSocket socket = new DatagramSocket(888);
      // 2.构建datagramPacket ,用于接收数据
      byte[] data = new byte[1024];// 缓冲区
      DatagramPacket packet = new DatagramPacket(data, data.length);// 只需要有数据就行
      // 3.通过socket的receive方法,将数据封装到packet中
      while (true) {
       socket.receive(packet);// 该方法是阻塞方法// 把包以参数,10000端口监听到的信息,封装给包
       // 4.通过packet提供的相应方法,获取客户端发送的相应信息
       // InetAddress ip = packet.getAddress();
       // System.out.println(ip.getHostAddress());
       String content = new String(packet.getData(), 0, packet.getLength());// 返回字节数组
       System.out.println(content);
      }

    首先运行接收端,然后运行接收端

    9. TCP客户端开发

     客户端

    1. 建立TCP客户端socketfuw

    Socket socket=new Socket(192.168.1.161,10001);

    2.通过socket的getOutputStream()获得流对象

    OutputStream out=socket.getOutputStream();

    3.通过流对象的操作方法传输数据

    byte[] data="开始春游".getByte();

    out.write(data);

    4.关闭资源

    socket.close();

     提前建立连接,在客户端和服务器端创建socket服务

    tcp和udp编程的不同

    1. 使用的封装API不一样

    2.IP和端口号,udp是写到包里的,不用写在socket服务中

                       tcp是写到socket服务中,和服务器端建立连接

    3. udp使用的是包,tcp使用的是流

    输出是write,输入read

    10 TCP服务器端开发

    服务端

    1. 建立TCP服务端socket服务

    ServerSocket ss=new ServerSocket(10001);

    2.通过ss的accept()获得客户端对象

    Socket socket=ss.accept();

    3.通过socket获取读取流,读取客户端发送的数据

    InputStream in=socket.getInputStream();

    4.通过流对象操作数据

    byte[] buf=new byte[1024];

    int len=in.read(buf);

    5.关闭资源

    socket.close();

    ss.close();

     11。TCP服务端和客户端的相互通讯

    服务端回写信息

    // 还可以回写信息,客户端和服务器端相互通信
      OutputStream out = socket.getOutputStream();
      // byte[] data = "可以".getBytes();
      out.write("收到收到".getBytes());

    客户端接收信息

    // 接收服务器端数据
      InputStream in = socket.getInputStream();
      byte[] buf = new byte[1024];
      int len = in.read(buf);
      System.out.println(new String(buf, 0, len));

    12.智能聊天机器人客户端开发

  • 相关阅读:
    冒泡排序
    三种for循环遍历
    打印一年中的月历
    基于主主复制的mysql双机热备+keepalived实现高可用性
    docker实现apache+php容器和mysql容器独立运行
    XML和JSON
    PHP表单
    【翻译-Docker】Post-installation steps for Linux
    【翻译】docker install
    小计划
  • 原文地址:https://www.cnblogs.com/shiyeyeyeye/p/5287498.html
Copyright © 2011-2022 走看看