java 网络编程之UDP

网络编程(UDP传输)

*1.发送Send

* 创建DatagramSocket, 随机端口号
* 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket
* 关闭DatagramSocket

* 2.接收Receive

* 创建DatagramSocket, 指定端口号
* 创建DatagramPacket, 指定数组, 长度
* 使用DatagramSocket接收DatagramPacket
* 关闭DatagramSocket
* 从DatagramPacket中获取数据

* 3.接收方获取ip和端口号

* String ip = packet.getAddress().getHostAddress();
* int port = packet.getPort();

* 4.案例:

package com.th.socket;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * Created by Administrator on 2018/6/6.
 * 网络编程之UDP socket编程
 * 1- 创建DatagramSocket,指定端口号  (创建码头)
 * 2- 创建DatagramPacket, 指定数据   (创建包装箱)
 * 3- 使用DatagramSocket 发送DatagramPacket
 * 4- 关闭DatagramSocket
 */
public class UDP_send_01 {

    public static void main(String[] args) throws Exception {

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    messageSend();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    messageReceive();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    /**
     *  * 网络编程之UDP socket编程
     * 1- 创建DatagramSocket,指定端口号  (创建码头)
     * 2- 创建DatagramPacket, 指定数据   (创建包装箱)
     * 3- 使用DatagramSocket 接收DatagramPacket
     * 4- 关闭DatagramSocket
     * 5- 从DatagramPacket中获取数据
     * @throws IOException
     */
    private static void messageReceive() throws IOException {
        //1- 创建DatagramSocket,指定端口号  (创建码头)
        DatagramSocket socket = new DatagramSocket(6666);
        //2- 创建DatagramPacket, 指定数据   (创建包装箱)
        DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024);

        while ( true ){
            //3- 使用DatagramSocket 接收DatagramPacket
            socket.receive(datagramPacket);
            // 使用内存输入流将字节转成字符串  处理有中文时的乱码
            ByteArrayInputStream byteArrayInputStream =
                    new ByteArrayInputStream(datagramPacket.getData(), datagramPacket.getOffset(),
                            datagramPacket.getLength());
            InputStreamReader inputStreamReader = new InputStreamReader(byteArrayInputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = bufferedReader.readLine();
            bufferedReader.close();

            // 5- 从DatagramPacket中获取数据
            // 5-1 获取数据
            //byte[] data = datagramPacket.getData();
            //int len = datagramPacket.getLength();
            if ( "exit".equalsIgnoreCase(str) ) {
                break;
            }
            System.out.println(datagramPacket.getAddress().getHostAddress());
            System.out.println(datagramPacket.getPort());
            System.out.println(datagramPacket.getSocketAddress());
            System.out.println(datagramPacket.getAddress().getHostName());
            System.out.println(str);
        }

        //4- 关闭DatagramSocket
        socket.close();
    }

    /**
     * * 网络编程之UDP socket编程
     * 1- 创建DatagramSocket,指定端口号  (创建码头)
     * 2- 创建DatagramPacket, 指定数据   (创建包装箱)
     * 3- 使用DatagramSocket 发送DatagramPacket
     * 4- 关闭DatagramSocket
     * @throws IOException
     */
    private static void messageSend() throws IOException {
        Scanner scanner = new Scanner(System.in);
        // 1- 创建DatagramSocket,指定端口号  (创建码头)
        DatagramSocket socket = new DatagramSocket();
        // 2- 创建DatagramPacket, 指定数据   (创建包装箱)
        //String src = "Hello!你好啊!";
        while ( true ){
            String src = scanner.nextLine();

            DatagramPacket datagramPacket =
                    new DatagramPacket(src.getBytes(), src.getBytes().length,
                            InetAddress.getByName("127.0.0.1"), 6666);

            // 3- 使用DatagramSocket 发送DatagramPacket
            if ( "exit".equalsIgnoreCase(src) ) {
                socket.send(datagramPacket);
                break;
            }
            socket.send(datagramPacket);
        }

        // 4- 关闭DatagramSocket
        socket.close();
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值