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

    网络编程三要素:ip地址,端口,协议

    两个DOS命令:ipconfig--查看本机ip地址  ping+ip地址--测试本机与指定ip地址间通信是否有问题

    特殊ip地址:127.0.0.1--回环地址(表示本机)  x.x.x.255--广播地址  x.x.x.0--网络地址

    ip地址:

    对ip地址的获取和操作,java提供InetAddress类

      没有构造方法:

        三种情况会没有构造方法:成员全部是静态  单例设计模式  类中有静态方法返回该类的对象

        InetAddress有4静态方法根据不同参数返回InetAddress对象,用这个对象获取和操作ip

    端口号:

      端口号是正在运行的程序的标识,有效端口从0到65535,其中0到1024是系统使用或保留端口

    协议:

      UDP:将数据源和目的封装在数据报中,不需要建立连接,每个数据报大小不超过64k,无连接,不可靠,速度快

      TCP:建立连接,三次握手完成连接,可靠协议,效率稍低

      一般一个软件既有UDP又有TCP

    Socket:

      网络上具有唯一标识的ip地址和端口号组合在一起才能构成唯一能识别的标识符套接字,即Sockt包含了IP地址+端口

      网络编程也就是Socket编程

      通信两端都有Socket,网络通信就是Socket间的通信,数据在两个Socket间通过IO传输

    UDP和TCP使用不同的Socket

    TCP Socket:

      客户端套接字:java.net.Socket,直接子类:SSLSocket

      服务端套接字:java.net.ServerSocket,直接子类:SSLServerSocket

    UDP Socket:java.net.DatagramSocket,直接子类:MuticastSocket

    UDP协议发送数据:

      创建发送端Socket对象

      创建数据并把数据打包

      调用Socket对象的send方法发送数据包

      释放资源

    class UDPSendDemo{
    public static void main(String[] args) throws IOException {
    //创建发送端Socket对象
    DatagramSocket ds = new DatagramSocket();
    //创建数据并把数据打包
    //通过DatagramPacket(byte[] buf, int length, IneAddress address, int port)打包数据
    //要发送的具体数据
    byte[] buf = "hello".getBytes();
    //长度
    int length = buf.length;
    //远程主机ip地址对象
    InetAddress address = InetAddress.getByName("192.168.12.92");
            //远程主机端口号
    int port = 10086;
    DatagramPacket dp = new DatagramPacket(buf,length,address,port);
    ds.send(dp);
    ds.close();
    }
    }

    UDP协议接收数据:

      创建接收端Socket对象

      创建一个数据包(接收容器)

      调用Socket对象的接收方法接收数据

      解析数据包,并显示

      释放资源

    class UDPReceiveDemo{
    public static void main(String[] args) throws IOException{
    //创建接收端Socket对象,因为是接收端,所以要指定一个端口号
    DatagramSocket ds = new DatagramSocket(10086);
    //创建一个数据包接收容器
    byte[] buf = new byte[1024];
    int length = buf.length;
    DatagramPacket dp = new DatagramPacket(buf,length);
    //调用Socket的接收方法接收数据
    //阻塞式方法,接收端运行后,不接受到发送端数据报时,会一直运行着
    ds.receive(dp);
    //解析数据包并展示,获取ip,获取数据
    InetAddress address = dp.getAddress();
    String ip = address.getHostAddress();
    byte[] buf2 = dp.getData();
    int len = dp.getLength();
    String s = new String(buf2,0,len);
    System.out.println("发送的数据是"+ s);
    //释放资源
    ds.close();
    }
    }

    TCP协议要一定要先开服务端

    TCP发送数据:

      创建发送端Socket对象,如果成功,说明连接已经建立

        连接被拒绝:java.net.ConnectException:Connect refused:connect

      获取输出流,写数据

      释放资源

    class TCPSendDemo{
    public static void main(String[] args) throws IOException{
    //创建发送端Socket对象
    Socket s = new Socket("192.168.12.92",8888);
    //获取输出流,写数据
    OutputStream os = s.getOutputStream();
    os.write("hello".getBytes());
         //通知服务器发送完毕
         s.shutdownOutput();
    //释放资源
    s.close();
    }
    }

    TCP接收数据

      创建接收端Socket对象

      监听客户端连接,返回一个对应的Socket对象

      获取输入流,读取数据并展示

      释放资源

    class TCPServerDemo{
    public static void main(String[] args) throws IOException{
    //创建接收端Socket对象
    ServerSocket ss = new ServerSocket(8888);
    //监听客户端连接,返回一个对应的Socket对象
    //accept方法侦听并接收此套接字的连接,在连接传入前一直阻塞
    Socket s = ss.accept();
    //获取输入流,读取数据并展示
    InputStream is = s.getInputStream();
    byte[] buf = new byte[1024];
    int len = is.read(buf);//阻塞式方法
    String str = new String(buf,0,len);
    String ip = s.getInetAddress().getHostAddress();
    System.out.println(ip+"-----"+str);
    //释放资源
    s.close();
    }
    }

    释放资源

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7445785.html
Copyright © 2011-2022 走看看