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();
    }
    }

    释放资源

  • 相关阅读:
    已经有人提出过循环
    中华术数系列之奇门遁甲精简版
    研究下市场上有哪些软件项目/产品,哪些是值得做的?
    中华术数系列之奇门遁甲手机版
    Webbrowser代理支持
    随笔:杂念纷呈
    架构设计实践:基于WCF大型分布式系统(转)
    WCF分布式开发必备知识(3):Enterpise Services(转)
    看完这20部电影 你能变成经济学大师(转)
    WCF服务契约继承与分解设计(转)
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7445785.html
Copyright © 2011-2022 走看看