java 中怎么使用UDP?

java 中怎么使用UDP?,第1张

发送步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。

将数据打包到DatagramPacket中去

通过socket服务发送 (send()方法

关闭资源

import java.io.IOException  

import java.net.*  

  

public class Send {  

  

    public static void main(String[] args)  {  

          

        DatagramSocket ds = null  //建立套间字udpsocket服务  

          

        try {  

          ds = new DatagramSocket(8999)  //实例化套间字,指定自己的port  

        } catch (SocketException e) {  

            System.out.println("Cannot open port!")  

            System.exit(1)   

        }  

          

        byte[] buf= "Hello, I am sender!".getBytes()  //数据  

        InetAddress destination = null   

        try {  

            destination = InetAddress.getByName("192.168.1.5")  //需要发送的地址  

        } catch (UnknownHostException e) {  

            System.out.println("Cannot open findhost!")  

            System.exit(1)   

        }  

        DatagramPacket dp =   

                new DatagramPacket(buf, buf.length, destination , 10000)    

        //打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)  

          

        try {  

            ds.send(dp)  //发送数据  

        } catch (IOException e) {  

        }  

        ds.close()  

    }  

}

接收步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。

定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容

通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中

使用DatagramPacket的方法,提取数据。

关闭资源。

import java.net.*  

  

public class Rec {  

  

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

          

        DatagramSocket ds = new DatagramSocket(10000)  //定义服务,监视端口上面的发送端口,注意不是send本身端口  

          

        byte[] buf = new byte[1024]//接受内容的大小,注意不要溢出  

          

        DatagramPacket dp = new DatagramPacket(buf,0,buf.length)//定义一个接收的包  

          

        ds.receive(dp)//将接受内容封装到包中  

          

        String data = new String(dp.getData(), 0, dp.getLength())//利用getData()方法取出内容  

          

        System.out.println(data)//打印内容  

          

        ds.close()//关闭资源     

    }  

}

创建两个类 分别添加main方法 一个作为server类一个作为client类

客户端先发送再接收  服务器端先接收再发送

下面给你一个server和client的例子 你在基础上改一下就行了

client发送的时候发送三边值  server接收后 写一个计算三角形面积的函数 把接收到的三边值传入函数计算出结果作为数据返回到client端

/**

 *UDPServer

 */

import java.io.*

import java.net.*

class UDPServer{

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

        DatagramSocket  server = new DatagramSocket(5050)

        byte[] recvBuf = new byte[100]

        DatagramPacket recvPacket 

            = new DatagramPacket(recvBuf , recvBuf.length)

        server.receive(recvPacket)

        String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength())

        System.out.println("Hello World!" + recvStr)

        int port = recvPacket.getPort()

        InetAddress addr = recvPacket.getAddress()

        String sendStr = "Hello ! I'm Server"

        byte[] sendBuf

        sendBuf = sendStr.getBytes()

        DatagramPacket sendPacket 

            = new DatagramPacket(sendBuf , sendBuf.length , addr , port )

        server.send(sendPacket)

        server.close()

    }

} /**

 *UDPClient

 */

import java.io.*

import java.net.*

class UDPClient{

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

        DatagramSocket client = new DatagramSocket()

        

        String sendStr = "Hello! I'm Client"

        byte[] sendBuf

        sendBuf = sendStr.getBytes()

        InetAddress addr = InetAddress.getByName("127.0.0.1")

        int port = 5050

        DatagramPacket sendPacket 

            = new DatagramPacket(sendBuf ,sendBuf.length , addr , port)

        client.send(sendPacket)

        byte[] recvBuf = new byte[100]

        DatagramPacket recvPacket

            = new DatagramPacket(recvBuf , recvBuf.length)

        client.receive(recvPacket)

        String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength())

        System.out.println("收到:" + recvStr)

        client.close()

    }

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/229883.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存