• 网络编程


    1,IP地址

    2,端口

    3,协议

      UDP&TCP

      1,创建UDP传输的发送端

        思路:1,建立udp的socket服务;2,将要发送的数据封装到数据包,使用DatagramPacket对象将数据封装到改对象啊中;3,通过udp的socket服务将数据包发送出去;4,关闭socket服务。

        1,建立udp的socket服务

        DatagramSocket ds = new DatagramSocket();

        2,将要发送的数据封装到数据包中

        /*String str = "udp传输演示,”;

          // 使用DatagramPacket对象将数据封装到对象包中

          byte[] buf = str.getBytes();*/

        BufferReader bufr = new bufferedReader(new InputStreamReader(System.in));

        String line = null;

        while((line=buffr.readLine())!=null){

        byte[] buf = line.getBytes();

        DatagramPacket dp = 

                  new   DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);

        ds.sed(sp);

        if("886".eauals(line))

          break;

        }

        /*DatagramPacket dp = 

              new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);

              new DatagramPacket(数据数组,数据大小,iP对象,端口号);

        3,通过udp的socket服务将数据包发送出去;

        ds.send(dp);*/

        4,关闭socket服务

        ds.close();

       2,创建UDP传输的接收端

      1,建立udp socket服务;2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析接收到的数据;3,使用socket服务的receive方法将接受到的数据存储到数据包中。4,通过数据包的方法解析数据包中的服务;5,关闭资源。

      1,建立udp socket服务

      DatagramSocket ds = new DatagramSocket(10000);

      2,创建数据包

      byte[] buf = new byte[1024];

      Datagrampacket dp = new DatagramPacket(buf,buf.length);

      3,使用socket服务的receive方法将接收到的数据存储到数据包中

      ds.receive(dp);

      4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。

      String ip = dp.gerAddress().getHostAddress();

      int port = dp.getPort();

      String  text = new String(dp.getData(),0,dp.getlength());

      5,关闭资源

      ds.close();

      

        

      TCP

      1,客户端发数据到服务端

      Tcp传输,客户端建立的过程。

        1,创建tcp客户端socket服务,使用的是socket对象。

          建议该对象一创建就明确目的地。要连接的主机。

        2,如果连接建立成功,说明数据传输通道已建立

          该通道就是socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。

          想要输入或者输出流对象,可以找socket来获取。

          可以通过getOutputStream()和getInputStream()来获取两个字节流。

        3,使用输出流,将数据写出。

        4,关闭资源。

        1,创建客户端服务

        Socket socket = new Socket("192.168.1.100",10002);

        2,获取socket流中的输出流

        OutputStream out = socket.getOutputStream();

          使用输出流将指定的数据写出

         out.write("tcp演示:哥们来了!”);

        2.1,读取服务端返回的数据,使用socket读取流。

          InputStream in = socket.getInputStream();

          byte[] buf = new byte[1024];

          int len = in.read(buf);

          String text = new String(buf,0,len);

          System.out.println(text);

        3,关闭资源  

         socket.close();

        

      2,服务端接收数据

        1,创建服务端socket服务。通过ServerSocket对象。

        2,服务端必须对外提供一个端口,否则客户端无法连接。

        3,获取连接过来的客户端对象。

        4,通过客户端对象获取socket流读取客户端发来的数据。并打印在控制台上。

        5,关闭资源。关客户端,关服务器。

        1,创建服务端对象

        ServerSocket ss = new ServerSocket(10002);

        2,获取连接过来的客户端对象

        Socket s = ss.accept();//阻塞式

        3,通过socket对象获取输入流,要读取客户端发来的数据

        InputStream in =s.gerInputStream();

        byte[] buf = new byte[1024];

        int len = in.read(buf);

        String text = new String(buf,0,len);

        System.out.println("server:"+text);

        3.1,使用客户端socket对象的输出流给客户端返回数据

        OutputStram out = s.getOutputStream();

        out.write("收到”.getBytes());

        4,关闭资源

        s.close();

        ss.close();

     3,tcp C/S例子:客户端发送字母数据到服务端,服务端经过大小写转换返回给客户端,并等待客户端OVER响应。

        1,客户端代码

         public class TransClient{

         public static void main(String[] args){

          //客户端

          //1,需要现有socket端点;2,客户端的数据源:键盘;3,客户端的目的:socket;4,接收服务端的数据,源:socket;5,将数据显示到控制台,目的:控制台;6,在这些流中操作的数据都是文本数据。

          //转换客户端  

          //1,创建socket客户端对象;2,获取键盘录入;3,将录入的信息发送给socket输出流。

          //1,创建socket客户端对象。

          Socket s = new Socket("192.168.1.100",1004);

          //2,获取键盘录入

          BufferedReader bufr = 

              new BufferedReader(new InputStreamReader(System.in));

          //3,socket输出流

          PrintWriter out = new PrintWriter(s.getOutputStream(),true);

          //4,socket输入流,读取服务端返回的大写数据

          BufferedReader burIn =

           new BufferedReader(new InputStreamReader(s.getInputStream()));

          

          String line = null;

          while(line=buffr.readLine())!=null){

            if("over".equals(line))

              break;

           out.println(line);

           //读取服务端返回的大写数据

           String uperStr = bufIn.readLine();

           System.out.println(upperStr);

          }

          s.close();

    }

    }

      2,服务端代码

      public class TransServer{

        public static void main(String[] args){

        //装换服务端

        //1,ServerSocket服务;2,获取socket对象;3,源:socket,读取客户端发过来的需要转换的数据;4,目的:显示在控制台上;5,将数据转化大写,发给客户端;

        //1,创建ServerSocket服务

         ServerSocket ss = new ServerSoket(10004);

        //2,获取socket对象

         Socket s = ss.accept();

          //获取IP

          String ip = s.getInetAddress().getHostAddress();

          System.out.println(ip+".......connected");

        //3,获取socket读取流,并装饰

        BufferedReader bufIn =         

          new BufferedReader(new InputStreamReader(s.getInputStream()));

        //4,获取socket的输出流,并装饰

         PrintWrinter out = new PrintWriter(s.getOutputStream(),true);

          String line = null;

          while(line=bufIn.readLine())!=null){

            System.out.println(line);

            out.println(line.toUpperCase());

    }

      s.close();

      ss.close();

    }

    }

  • 相关阅读:
    从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
    从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令
    js获取某个时间段前多长时间
    Object.create()详解
    React Redux
    react 路由按需加载
    react @types/react-router-dom报错
    create-react-app 创建react ts项目启动报错
    十进制转二进制、八进制、十六进制(js)
    代码编辑器设置自定义提示
  • 原文地址:https://www.cnblogs.com/jinb/p/6233830.html
Copyright © 2020-2023  润新知