首页 > 其他 > 详细

网络编程 UDP

时间:2021-02-17 23:56:29      阅读:34      评论:0      收藏:0      [点我收藏+]

不用连接,需要指定对方地址!

UDP是没有客户端和服务端的概念。

★ UDP消息发送

1.创建一个发送端  UdpClientDemo01.java

package com.ckfuture;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UdpClientDemo01 {
    public static void main(String[] args) throws Exception {
        //1.建立一个Socket
        DatagramSocket socket = new DatagramSocket();
        //2.建立个包
        String msg="你好啊,服务器!";
        //发送给谁
        InetAddress IP = InetAddress.getByName("127.0.0.1");
        int port=9090;
        //数据,数据的起始,数据的长度,要发给谁
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, IP, port);

        //3.发送包
        socket.send(packet);

        //关闭资源
        socket.close();
    }
}

2.创建一个接收端  UdpServerDemo01.java

package com.ckfuture;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpServerDemo01 {
    public static void main(String[] args) throws Exception {
        //1.开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        //2.接收数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);

        socket.receive(packet);
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(),0,packet.getLength()));

        //关闭资源
        socket.close();
    }
}

3.依次运行接收端和发送端

技术分享图片

 

 ★ UDP聊天实现(单线程)

1.创建一个消息发送类  UdpSenderDemo01.java

package com.ckfuture;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class UdpSenderDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(8888);

        //准备数据
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while(true){
            String data = reader.readLine();
            byte[] datas = data.getBytes();
            DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
            socket.send(packet);
            //本地退出
            if(data.equals("bye")){
                break;
            }
        }
        //关闭资源
        socket.close();
    }
}

2.创建一个接收消息类  UdpReceiveDemo01.java

package com.ckfuture;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpReceiveDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);

        //死循环接收信息
        while(true){
            //准备接受消息
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container,0,container.length);
            socket.receive(packet);//阻塞式接收消息

            //转换成字符串
            byte[] data = packet.getData();
            String receiveData = new String(data, 0, data.length);
            //输出接收的消息
            System.out.println(receiveData);

            //断开连接
            if(receiveData.equals("bye")){
                break;
            }
        }
        socket.close();

    }
}

3.依次运行发送端和接收端

只是实现了一个循环发送一个循环接收,并没有实现双方聊天的效果。

技术分享图片

 

 技术分享图片

 

 

 

 

网络编程 UDP

原文:https://www.cnblogs.com/ckfuture/p/14409149.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!