Java之UDP通信

DatagramSocket类

  此类用于表示发送和接收数据报包的套接字。

  • DatagramSocket(int port):创建数据报套接字,并将其绑定到本地主机上的指定端口。
  • DatagramSocket(int port, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。
  • receive(DatagramPacket p):从此套接字接收数据报包。
  • void send(DatagramPacket p):向此套接字发送数据报包。
  • bind(SocketAddress addr):将此DatagramSocket绑定到特定的地址和端口。
  • void close():关闭此数据报套接字。
  • void connect(InetAddress address, int port):连接到此套接字的远程地址。
  • void connect(SocketAddress addr):连接到此套接字的远程地址(IP地址和端口号)。
  • void disconnect():断开套接字的连接。
  • getInetAddress():返回此套接字连接的地址。
  • InetAddress getLocalAddress():获取套接字绑定的本地地址。

InetAddress类

  InetAddress是一个用于表示计算机IP地址的类,而IP地址经常用192.168.0.1WWW.it315.org等字符串格式表示。主要有getByNamegetHostAddress方法。

DatagramPacket类

  如果把DatagramSocket比作港口码头,那么DatagramPacket就是发送和接收数据的集装箱。

  • DatagramPacket(byte[] buf, int length):构造DatagramPacket,用来接收长度为length的包。
  • DatagramPacket(byte[] buf, int length, InetAddress address, int port):构造数据报文包,用来把长度为length的包传送到指定宿主的指定的端口号。
  • getAddress():返回接收或发送此数据报文的机器的IP地址。
  • getData():返回接收的数据或发送出的数据。
  • getLength():返回发送出的或接收到的数据的长度。
  • getPort():返回接收或发送该数据报文的远程主机端口号。

  UDP客户端如下:

import java.net.*;

public class UdpSend {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket();
        String strInfo = "Hello World";
        byte[] send_buf = strInfo.getBytes();
        InetAddress address = InetAddress.getByName("192.168.1.108");
        int port = 9999;
        DatagramPacket packet = new DatagramPacket(send_buf, send_buf.length, address, port);
        ds.send(packet);
        ds.close();
    }
}

UDP服务器如下:

import java.net.*;

public class UdpRecv {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket(9999);
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf, 1024);
        ds.receive(dp);
        String strInfo = new String(dp.getData(), 0, dp.getLength());
        strInfo += " from " + dp.getAddress().getHostAddress() + ":" + dp.getPort();
        System.out.println(strInfo);
        ds.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值