zoukankan      html  css  js  c++  java
  • 网络编程


    一、定义:可在网络间通信
    二、网络通信3要素:
        A:IP地址 公共地址 私有地址
        B:端口号   设备进场地址,(软件之间连接的编号)
        C:通信协议:UDP协议 不需连接,不区分客户端和服务端,速度快 不可靠。  TCP协议 要连接 区分客户端和服务端 效率                  低 可靠
    三、InetAddress类的常用方法:
        static InetAddress getByname(String name);//通过主机名/IP地址构建一个InetAddress对象
        Static getHostAddress();//返回IP地址
        getHostName();//返回主机名
    四、UDP协议:
       发送端:创建发送端Socket对象->创建数据并打包->发送数据->释放资源
           DatagramSocket:用来发送接收数据,基于UDP
            DatagramSocket():
            DatagramSocket(int port):
            DatagramPacket(byte[] buf,int length,InetAddres address,int port)
     接受端:创建接收端Socket对象->接收数据->解析数据->输出数据->释放资源

    //发送端
    public class UDPIPsendss {
        public static void main(String[] args) throws IOException {
            DatagramSocket dgs = new DatagramSocket();
            
            //发送的内容
            String s = "hello";
            //转成字节数组
            byte[] by = s.getBytes();
            //获取字节数组长度
            int len = by.length;
            //获取发送的地址
            InetAddress iad = InetAddress.getByName("127.0.0.1");
            //指定设备端口号
            int port = 8888;
    
            //打包
            DatagramPacket p = new DatagramPacket(by, len, iad, port);
    
            //发送数据
            dgs.send(p);
    
            //释放资源
            dgs.close();
            
            
        }
    }
    
    //接受端
    public class UDPipReceive {
        public static void main(String[] args) throws IOException {
            //创建接收到对象,并给定端口号
            DatagramSocket ds = new DatagramSocket(8888);
            
            //创建一个包用来存接收到的信息
            byte[] by = new byte[1024];
            int length = by.length;
             DatagramPacket dp = new DatagramPacket(by, length);
    
             //将信息传入包
             ds.receive(dp);//阻塞
    
             //获取发送端地址
             InetAddress adress = dp.getAddress();
             //获取接收到的数据
             byte[] b = dp.getData();
             //获取接收到的长度
             int len = dp.getLength();
             
             //打印信息
             System.out.println("-->"+adress.getHostAddress());
             System.out.println(new String(b,0,len));
             
             //释放资源
             ds.close();
        }
    }

        
    注意事项:A:端口号错误,可发送,无异常,接收不到,B:端口号不能重复
       
    五、TCP协议:
       创建发送端(客户端)Socket对象->获取输出流对象->发送数据->释放资源
       创建接受端(服务端)Socket对象(确认端口号)->监听(阻塞)->创建输入流对象->获取数据->输出对象->释放资源(可不关)
          ServerSocket(int port);
          Socket accept();

    //发送端
    public class TcpSends {
        public static void main(String[] args) throws IOException {
            //创建发送端Socket对象
            Socket s = new Socket(InetAddress.getByName("127.0.0.1"),9999);
            //创建输出流
            OutputStream os =s.getOutputStream(); 
            
            String ss = "hello";
            //发送数据
            os.write(ss.getBytes());
            
            //释放资源
            os.close();
            
        }
    }
    
    //接受端
    public class TcpReceive {
        public static void main(String[] args) throws IOException {
            //创建接受端(服务端)Socket对象(确认端口号)
            ServerSocket ss = new ServerSocket(9999);
            //监听(阻塞)
            Socket s = ss.accept();
            //创建输入流对象
            InputStream is = s.getInputStream();
            
            //准备一个数组用来存放接收到的字节
            int len;
            byte[] by = new byte[1024];
            //获取数据
            len = is.read(by);
            
            InetAddress iad = s.getLocalAddress();
            System.out.println("client-->"+iad);
            //输出接收到的信息
            System.out.println(new String(by,0,len));
            s.close();
        }
    }

    小案例

    //客户端读取本地一个图片并发送,服务端接收并存储
    public class TCPSendZong {
        public static void main(String[] args) throws IOException {
            //创建Socket对象,给出发送的目的地址和端口号
            Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8888);
            //创建输出流
            OutputStream os = s.getOutputStream();
            //提升至高效输出流
            BufferedOutputStream bos = new BufferedOutputStream(os);
            
            //创建高效输入流,读取本地图片
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\Users\魔女\Desktop\学习途.png"));
            //读取数据
            byte[] by = new byte[1024];
            int len = by.length;
            while((len = bis.read(by))!=-1){
                //发送
                bos.write(by,0,len);
            }
            //释放资源
            s.close();
            bos.close();
            bis.close();
        }
    }
    
    public class TCPSerZong {
        public static void main(String[] args) throws IOException {
            //创建服务端的Socket对象
            ServerSocket ss = new ServerSocket(8888);
            //服务端获取Socket对象,接收
            Socket s = ss.accept();
            //创建输入流
            InputStream is = s.getInputStream();
            //提高输入流高效级别
            BufferedInputStream bis = new BufferedInputStream(is);
            //创建输出流将接收到的图片保存到本地
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D://a.png"));
            //接收到的信息
            byte[] by = new byte[1024];
            int len;
            while((len=bis.read(by))!=-1){
                //写入本地地址
                bos.write(by,0,len);
            }
            
            //释放资源
            s.close();
            bis.close();
            bos.close();
        }
    }


     

    smile
  • 相关阅读:
    WordPress Ambience主题‘src’参数跨站脚本漏洞
    Linux Kernel fallocate实现拒绝服务漏洞
    WordPress Content Slide插件跨站请求伪造漏洞
    WordPress Mail Subscribe List插件‘sml_name’参数HTML注入漏洞
    WordPress NextGEN Gallery插件‘swfupload.swf’多个跨站脚本漏洞
    由Firefox的NoScript插件升级想到的
    在长春继续吃
    NB到SB
    边走边记
    为什么不坐热气球?
  • 原文地址:https://www.cnblogs.com/qiuqiu001/p/7956110.html
Copyright © 2011-2022 走看看