黑马程序员技术交流社区

标题: 网络编程中的UDP 和 TCP协议 [打印本页]

作者: 菜鸟的求学路    时间: 2015-5-21 17:26
标题: 网络编程中的UDP 和 TCP协议
     大家都知道,网络编程是重点,以后的开发中也会经常碰到.但对于像我这样的新人来说,它也是难点,因此总结了一下网络编程中最常用的两个协议,以及他的用法,还望斧正:
    UDP 协议
        发送方:
                1.封装Socket:DatagramSocket;
                        DatagramSocket socket = new DatagramSocket();
                2.准备要发送的数据,IP地址,端口号;
                        1).数据
                        byte[] byteArr = "你还好吗?".getBytes();
                        2).IP地址
                        InetAddress add = InetAddress.getByName("Lenovo-PC");
                        3).端口
                        int port = 8888;
                3. 封装数据包:DatagramPacket
                DatagramPacket packet = new DatagramPacket(byteArray,byteArray.length,add,port);
                4.使用DatagramSocket的方法,将数据包发送出去;
                        socket.send(packet);
                5.释放资源
                        socket.close();

        接收方:
                1.实例化一个DatagramSocket(端口号)
                        DatagramSocket socket = new DatagramSocket(8888);
                2.实例化一个DatagramPacket,准备用来接收数据;
                        byte[] byteArray = new byte[1024];
                        DatagramPacket pak =new DatagramPacket(byteArray,byteArray.length);
                3.等待数据:
                        System.out.println("接收方等待数据......");
                        socket.receive(pak);//程序在这里阻塞。一直等待信息,什么时候有信息到达,                                                   什么时候返回
                        System.out.println("接收方接收到数据......");
                4.一旦有连接了,receive()方法返回,将数据填充到packet;
                从packet中解析数据;
                String ip = pak.getAddress().getHostAddress();
                int port = pak.getPort();
                byte[] byteInfo = pak.getData();
                System.out.println("byteInfo.length : "+ byteInfo.length);
               
                System.out.println("IP : " + ip + " 端口:" + port + " 信息内容:" +
                                                new String(byteInfo,0,pak.getLength()));
               
                //释放资源;
                socket.close();

TCP协议:
        发送方:
                //1.实例化一个Socket
                //端口是接收端使用端口。意思是:发送给192.168.40.148机器的8888端口
                Socket socket = new Socket("192.168.40.148",8888);
                //因为要发送数据,所以获取一个"输出流"
                OutputStream out = socket.getOutputStream();
                //发送数据
                out.write("你好,这是使用TCP发送的数据,请接收!!".getBytes());
                //关闭流;
                out.close();
                socket.close();
        接收方:
                //1.实例化一个ServerSocket
                                ServerSocket server = new ServerSocket(8888);
                //2.等待连接
                        System.out.println("接收方等待连接......");
                        Socket socket = server.accept();
                        System.out.println("获取到一个连接!");
                //3.要读取数据,获取输入流
                        InputStream in = socket.getInputStream();
                //4.读取数据
                        byte[] byteArray = new byte[1024];
                        int len = in.read(byteArray);//因为对方发一次,这里只读一次;
                        String str = new String(byteArray,0,len);
                        System.out.println("接收到信息:" + str);
                //5.释放资源
                        server.close();
作者: lingda21    时间: 2015-5-21 18:31
菜鸟路过,我也去总结下结合程序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2