Java UDP的简单实例以及知识点简述

UDP的实现

  Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类

  其与TCP协议实现不同的是:

  UDP的套接字DatagramSocket相比于Socket、ServerSocket来说,是一个非常简单的概念,没有连接的含义。套接字只需要知道侦听和发送数据包的本地端口即可

  也就是在TCP协议中庸Socket类和ServerSocket类进行功能划分,UDP协议中只用一个数据包套接字DatagramSocket发送和接受数据即可。

  发送和接收数据、地址和端口都封装在数据包类DatagramPacket中。


DatagramPacket类

  构造函数:

public DatagramPacket(byte[] buf,int length);
/*offset为buf缓冲区的偏移量*/
public DatagramPacket(byte[] buf,int offset,int length);
/*address表示目的地址    port表示目的端口*/
public DatagramPacket(byte[] buf,int offset,int length,InetAdress address, int port)

 常用方法:

/*返回接受数据包的主机IP地址,通常用于获取接受到数据包的发送主机IP*/
public InetAdress    getAdress();
/*返回数据包的主机端口号*/
public int getPort();
/*返回被接收或发送的缓冲区数据*/
public byte[] getData();
/*设置返回发出数据包的主机IP地址*/
public void setAdress(InetAdress iaddr);
/*设置要将此数据包发往远程主机上的端口号*/
public void setPort(int iport);

DatagramSocket类

  对于数据包套接字DatagramSocket来说,它只是发送或接收数据包的端口,不需要考虑链接。因此在客户端和服务器端都需要建立一个DatagramSocket对象,然后通过receive()方法接受数据包,通过send()方法发送数据包。


端口相关对照


UDP网络应用实例

客户端发送1-26数字给服务器端;

服务器端返回对应的A-Z给客户端。

客户端程序:

package web;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UDPCilent {
    public static void main(String[] args) {
        try {
            /*UDP Cilent SEND*/
            DatagramSocket socket=new DatagramSocket();
            System.out.println("UDP Cilent Start...");
            System.out.println("Enter 1 to 26 ,Server Will Return U A to Z:");
            String info=new Scanner(System.in).next();
            socket.send(new DatagramPacket(info.getBytes(), info.length(),InetAddress.getByName("127.0.0.1"),3000));
            System.out.println("UDP Cilent Send Message...");

            byte[] rec=new byte[1024];
            DatagramPacket recivepacket=new DatagramPacket(rec, rec.length);
            socket.receive(recivepacket);
            System.out.println("Receive");

            String reciveData=new String(recivepacket.getData(),0,recivepacket.getLength());
            System.out.println("Receive from"+recivepacket.getAddress().getHostAddress()+":"+reciveData);

            socket.close();
            System.out.println("UDP Cilent close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

服务端程序

package web;

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

public class UDPServer {

    public static void main(String[] args) {
        try {

            /*UDP Receive Message*/
            DatagramSocket socket=new DatagramSocket(3000);
            byte []bf=new byte[1024];
            DatagramPacket packet=new DatagramPacket(bf, 1024);
            System.out.println("UDP Server Start... Wait to Receive Message...");

            socket.receive(packet);
            String info=new String(packet.getData(),0,packet.getLength())+"from"+packet.getAddress().getHostAddress()+":"+packet.getPort();
            System.out.println(info);

            /*feedback*/
            InetAddress address= packet.getAddress();
            int port=packet.getPort();
            String str=new String(packet.getData(),0,packet.getLength());
            int renum=Integer.parseInt(str);
            int feedback=‘A‘;
            for(int i=1;i<=26;i++)
            {
                if(renum==i){
                    feedback=feedback+(i-1);
                }
            }
            char back=(char) feedback;
            String fbString=back+"";
            byte[] fstr=fbString.getBytes();
            DatagramPacket feed= new DatagramPacket(fstr,fstr.length,address,port);

            socket.send(feed);
            socket.close();
            System.out.println("UDP Server close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}
时间: 2024-08-06 20:07:33

Java UDP的简单实例以及知识点简述的相关文章

java网页爬虫简单实例详解——获取天气预报。

[本文介绍] 爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好.这里只是举个例子.话不多说了,上看看效果吧. [效果] 我们随便找个天气预报的网站来试试:http://www.weather.com.cn/html/weather/101280101.shtml 从图中可用看出,今天(6日)的天气.我们就以这个为例,获取今天的天气吧! 最终后台打印出: 今天:6日

java,UDP协议简单实现

//UDP协议简单实现-----Serverpackage UDP; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.nio.ByteBuffer; public class UdpServer implements Runnable { private int port; public UdpServer(int port

Java UDP通信简单实现

1.Java实现方式 1)服务器端 /** * UDP服务器端 * */ public class UdpServer { // 定义一些常量 private final intMAX_LENGTH = 1024; // 最大接收字节长度 private final intPORT_NUM = 5066; // 端口号 // 用以存放接收数据的字节数组 private byte[] receMsgs = new byte[MAX_LENGTH]; // 数据报套接字 private Datagr

Java WebService 开发简单实例

Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service可以执行从简单的请求到复杂商务处理的任何功能.一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务. 实际上,WebService的主要目标是跨平台的可互操作性.为了达到这一目标,WebService完全基于XML(可扩展标记语言). XSD(XMLSchema)等独立于平台.独立于软件供应商的标准,是创建可互操作的.分布式应用程序

java swing最简单实例(1) 一个空的JFrame

我准备写一个系列的java图形化界面的教程.每个程序都尽量只写维持运行所需的最简化程度的代码,好让大家都看懂. 使用java图形界面只需要jdk,eclipse即可.如果布局抽象能力不够强大,建议装jigloo先用它布局然后再抄代码.(jigloo自动生成的代码冗余量太大,放的位置也不合理,只是为了看效果,之后还是需要ctrl+C,ctrl+V的) 要想放置一切东西,我们需要先有一个JFrame.所以就先讲一讲怎样创建一个空的JFrame. 下面是一个最简单的例子,首先我们需要extends J

java组合排序简单实例

输入m个A和n个B,输出A,B的组合数: import java.util.Scanner; public class Main1 { public static void main(String[] args) { // TODO Auto-generated method stubScanner input=new Scanner(System.in);int m=input.nextInt();int n=input.nextInt();System.out.println(f(m,n))

PHP调用JAVA的WebService简单实例

使用PHP调用JAVA语言开发的WebService.客户端提交两个String类型的参数,服务端返回一个对象类型.服务端使用AXIS-1.4作为SOAP引擎.客户端为PHP5.2.9,使用NuSOAP作为SOAP引擎. 服务端: 对象类 import java.io.Serializable; public class Person implements Serializable { /** * */ private static final long serialVersionUID = -

java swing最简单实例(2) 往JFrame里面放一个容器或组件

可以往JFrame里面放的东西有两种,Containers和Components.在jigloo的图形化界面上可以清楚的看到这些 常用的Containers(容器)有这些: JFrame带标题和关闭按钮的界面 JPanel面板 JScrollPane带滚动条的面板 JSplitPane带分栏的面板 JTabbedPane标签页结构的面板 JDialog对话框 常用的Components(组件)有这些 JButton按钮 JLabel标签(用于显示固定不变的文字 JTextField文本框(用于让

java Socket通信简单实例

import java.io.*; import java.net.*; public class ClientTest { public static void main(String[] args) throws Exception { Socket s = new Socket("localhost", 8888); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(&qu