JAVA网络编程(1):Java编写简单的UDP网络程序

(1)Java中为UDP协议提供的编程类是DatagramSocket,这个被放在java.net包中。
(2)DatagramSocket类有三个构造方法:

(1) public DatagramSocket() throws SocketException
(2) public DatagramSocket(int port) throws SocketException
(3) public DatagramSocket(int port, InetAddress laddr) throws SocketException
使用第一种构造方法:如果UDP程序不用事先接收对方发送的数据,而是主动先对对方发送数据,可选择构造方法(1);
对于第一种构造方法:没有指定端口号,系统就会分配一个还没有被其他网络程序使用的端口号。

(3)如果不使用某个Socket,要调用DatagramSocket.close()关闭这个Socket。
(4)在发送数据时,要调用DatagramSocket.send()方法,send()方法的格式:
public void send(DatagramPacket p) throws IOException
(5)在接收数据时,要调用DatagramSocket.receive()方法,receive()方法的格式:
public void receive(DatagramPacket p) throws IOException
(6)类DatagramPacket,给出两种构造函数,分别用于发送数据和接收数据:
  • 接收数据:public DatagramPacket(byte [] buf, int length)
    注意;创建一个接收length长度数据的DatagramPacket对象,length必须小于或等于buf.length。
  • 发送数据:public DatagramPacket(byte [] buf, int length, InetAddress address, int port)
  • 注意:发送数据时,我们不需要知道目的IP地址和端口号。创建一个发送数据包,数据的长度为length,
    接收的端口号为port,目的IP地址为InetAddress类的一个实例对象address。length必须小于或等于buf.length。
(7)InetAddress类:是用于表示计算地址的一个类。
  • 在发送数据是时,要使用类InetAddress产生一个示例对象。
  • InetAddress.getByName(String str)这个静态方法返回一个InetAddress类的实例对象。
  • 第一种:直接调用方法InetAddress.getByName(“192.168.0.1”)。
  • 第二种;首先,返回一个以“.”点号为分隔符的IP地址字符串:String ipAddress = InetAddress.getLocalHost().getHostAddress();
    然后,调用方法InetAddress.getLocalHost(String str):InetAddress.getLocalHost(ipAddress)。
(8)如何知道发送方的IP地址和端口号?
  • 由于源(目的)IP地址和源(目的)端口号都被封装在UDP数据包中,因此:
获取发送方的IP地址:DatagramPacket.getInetAddress();
获取发送方的端口号:DatagramPacket.getPort();
(9)示例
//发送端
import java.net.*;
public class UdpSend  
{
    public static void main(String[] args) throws Exception
    {
        DatagramSocket ds = new DatagramSocket();
        String str = "hello world 中国我爱你!";
        byte [] sendData = str.getBytes();
        // 获取IP地址   
        String ipAddress = InetAddress.getLocalHost().getHostAddress();     
        ds.send(new DatagramPacket(sendData,sendData.length,InetAddress.getByName(ipAddress),3000));    
        //手动设置IP地址
        //ds.send(new DatagramPacket(sendData,sendData.length,InetAddress.getByName("202.117.131.7"),3000));
        ds.close();
    }
}
//接收端
import java.net.*;
public class UdpRecv 
{
    public static void main(String[] args) throws Exception
    {
        DatagramSocket ds = new DatagramSocket(3000);//接收指定端口的数据
        byte [] dataBuffer = new byte[1024];
        DatagramPacket dp = new DatagramPacket(dataBuffer,1024);
        ds.receive(dp);
        String strRecv = new String(dp.getData(),0,dp.getLength()) + " from " + 
                         dp.getAddress().getHostAddress() + ":" +dp.getPort();
        System.out.println(strRecv);
        ds.close();
    }
}
(10)编译和运行方法:
  • 首先,两个文件一起编译:>javac UdpSend.java UdpRecv.java。
  • 其次:运行接收程序:在编译的CMD命令窗口输入start,打开另外一个命令窗口,在新的窗口中运行接收程序>java UdpRecv。
  • 最后,在原来的命令窗口运行发送程序:>java UdpSend。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值