• 简单的UDP编程1


    服务端:

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.SocketException;
     7 
     8 //服务器
     9 public class AskServer {
    10     public static void main(String[] args) throws IOException {
    11         //1.创建一个DatagramSocket   用来发送或者接收数据的
    12         DatagramSocket socket  = new DatagramSocket(8888);//端口用来接收数据
    13         
    14         //2.使用DatagramSocket接收数据
    15         //接收数据 要使用 DatagramPacket
    16         byte [] buf = new byte [1024];//接收数据不需要知道对方IP
    17         DatagramPacket packet = new DatagramPacket(buf, buf.length);
    18         socket.receive(packet);
    19         //System.out.println(packet.getLength());//数据包的长度
    20         //System.out.println(packet.getData());//对方发送的数据
    21         //System.out.println(new String(packet.getData(),0,packet.getLength()));
    22         System.out.println("来自客户端的消息:"+new String(buf,0,packet.getLength()));
    23     /*    System.out.println(packet.getAddress());//对方的ip?
    24         System.out.println(packet.getPort());//对方的端口号*/    
    25         
    26         //3.向客户端发送数据
    27         String reply ="亲,在的";
    28         byte [] buf2 = reply.getBytes();
    29         //对方的IP可能随时变化   通过接收的数据包能够获取对方的ip和端口
    30         DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, packet.getAddress(), packet.getPort());
    31         socket.send(packet2);
    32         
    33         //4.关闭
    34         socket.close();
    35     }
    36 }
    AskServer.java

    客户端:

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 import java.net.SocketException;
     8 import java.net.UnknownHostException;
     9 
    10 /**
    11  * @author superdrew
    12  *        功能:客户和咨询师在线交流
    13  *        使用udp完成
    14  *        注意:
    15  *        1.udp没有严格意义区分服务端和客户端,双方都是平等的(主动发送请求是客户端,被动接收请求的是服务端)
    16  *        2.udp编程和IO流没有关系
    17  *        3.udp两个核心类
    18  *            DatagramSocket:用来接收或者发送数据包
    19  *            DatagramPacket:数据包
    20  *        4.客户端不写 port 端口 会 自动生成一个端口
    21  *
    22  *        分解1:先完成一次单向通信
    23  *           2:一次双向通信
    24  *           3:多次双向通信
    25  *
    26  *        总结:1。DatagramSocket 
    27  *                用来接收和发送数据的
    28  *                socket.send(packet)
    29  *                socket.receive(packet2)
    30  *            2。DatagramPacket
    31  *                封装了数据,对方的IP,对方的接收端口
    32  *                getLength()   获取对方发送数据的长度
    33  *                getData()     获取对方发送的数据 (字节数组)
    34  *                getAddress()  获取对方的ip
    35  *                getPort()     获取对方的发送数据的端口
    36  *            
    37  */
    38 
    39 public class AskClient {
    40     public static void main(String[] args) throws IOException {
    41         //1.创建DatagramSocket 用来发送数据
    42         DatagramSocket socket = new DatagramSocket(9999);//发送端的端口
    43         
    44         //2.使用DatagramSocket发送数据
    45         //发送数据只前 要 创建  DatagramPacket 数据包
    46         String info = "亲,在吗?";
    47         byte [] buf = info.getBytes();
    48         DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),8888);
    49         socket.send(packet);
    50         
    51         byte [] buf2 = new byte [1024];
    52         DatagramPacket packet2 = new DatagramPacket(buf2,buf2.length);
    53         socket.receive(packet2);//接收的数据都放到packet2里面了  对方发送的数据封装到了buf2 用 packet2.getData 效果是一样的s
    54         String result = new String(buf2,0,buf2.length);
    55         System.out.println("来自服务器的消息:"+result);
    56         
    57         //3.关闭资源
    58         socket.close();
    59     }
    60 
    61 }
    AskClient.java

    操作步骤:

    ① 运行服务端;② 运行客户端;

    结果展示:

  • 相关阅读:
    搭建elk的坑
    mail发邮件报错 "send-mail: fatal: parameter inet_interfaces: no local interface found for ::1"
    shell脚本排坑
    rocketmq双主发送消息 SLAVE_NOT_AVAILABLE 状态
    基于mysql的基准测试
    mysql服务器参数
    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
    mysql存储引擎
    zabbix安装
    iostat查看系统的IO负载情况
  • 原文地址:https://www.cnblogs.com/superdrew/p/8098684.html
Copyright © 2020-2023  润新知