精华内容
下载资源
问答
  • DatagramPacket

    2011-12-20 10:34:13
    一、DatagramPacket类: 如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。 构造函数:一个用来接收数据,一个用来发送数据 public DatagramPacket(byte[] buf,int ...

    一、DatagramPacket类:

    如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。
    构造函数:一个用来接收数据,一个用来发送数据
    public DatagramPacket(byte[] buf,int length) //接收数据
    构造 DatagramPacket 用来接收长度为 ilength 的包。 
    public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
    构造数据报文包用来把长度为 ilength 的包传送到指定宿主的指定的端口号。
    getAddress() 
    返回接收或发送此数据报文的机器的 IP 地址。 
    getData() 
    返回接收的数据或发送出的数据。 
    getLength() 
    返回发送出的或接收到的数据的长度。 
    getPort() 
    返回接收或发送该数据报文的远程主机端口号。

    二、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() 
                 获取套接字绑定的本地地址。

    展开全文
  • DatagramPacket和DatagramSocket

    千次阅读 2019-05-08 15:19:01
    DatagramPacket 在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,...

     

    DatagramPacket

    在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。

     

    在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组,还需要指定发送端IP地址和端口号。接下来根据API文档的内容,对DatagramPacket的构造方法进行逐一详细地讲解。

    使用该构造方法在创建DatagramPacket对象时,指定了封装数据的字节数组和数据的大小,没有指定IP地址和端口号。很明显,这样的对象只能用于接收端,不能用于发送端。因为发送端一定要明确指出数据的目的地(ip地址和端口号),而接收端不需要明确知道数据的来源,只需要接收到数据即可。

     

     

    DatagramPacket

    DatagramPacket数据包的作用就如同是“集装箱”,可以将发送端或者接收端的数据封装起来。然而运输货物只有“集装箱”是不够的,还需要有码头。在程序中需要实现通信只有DatagramPacket数据包也同样不行,为此JDK中提供的一个DatagramSocket类。DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包,发送数据的过程如下图所示。

    在创建发送端和接收端的DatagramSocket对象时,使用的构造方法也有所不同,下面对DatagramSocket类中常用的构造方法进行讲解。


    该构造方法用于创建发送端的DatagramSocket对象,在创建DatagramSocket对象时,并没有指定端口号,此时,系统会分配一个没有被其它网络程序所使用的端口号。

     

    该构造方法既可用于创建接收端的DatagramSocket对象,又可以创建发送端的DatagramSocket对象,在创建接收端的DatagramSocket对象时,必须要指定一个端口号,这样就可以监听指定的端口。

    上面我们讲解了DatagramSocket的构造方法,接下来对DatagramSocket类中的常用方法进行详细地讲解。

    展开全文
  • 信息安全老师布置了一个作业,要求编写一个可以让两个人利用Java UDP进行聊天的小程序,要求利用Datagramsocket和Datagrampacket,由于Java没学好,对于这两个类很是陌生,于是通过查询资料,对他俩有了以下这点浅薄...

    信息安全老师布置了一个作业,要求编写一个可以让两个人利用Java UDP进行聊天的小程序,要求利用Datagramsocket和Datagrampacket,由于Java没学好,对于这两个类很是陌生,于是通过查询资料,对他俩有了以下这点浅薄的认识

    UDP传输数据类似于在海上运输货物,DatagramSocket就像两个通信港口的码头,而DatagramPacket就像运输货物的轮船

    Datagrampacket类,用于封装UDP通信中发送或接收的数据
    Datagramsocket类,表示用来发送和接收数据报包的套接字

    在发送端:
    创建datagramsocket,随机端口号
    创建datagrampacket,制定数据,长度,地址和端口
    使用datagramsocket发送datagrampacket
    关闭datagramsocket
    异常处理

    在接收端:
    创建datagramsocket,匹配端口号
    创建datagrampacket,创建接收数据和有效数据长度
    接收socket
    接收packet
    关闭datagramsocket

    //发送端
    import java.io.IOException;
    import java.net.*;
    import java.util.Scanner;

    public class UDPSocketServerthread implements Runnable {

    byte[] ibuf = new byte[1024];
    String message;
    Scanner scanner = new Scanner(System.in);
    DatagramPacket datagramPacket;
    
    {   
    
        try {	   
    
            datagramPacket = new DatagramPacket(ibuf, ibuf.length, InetAddress.getByName("127.0.0.1"), 2020);
            //制定数据、长度、地址、端口
        } catch (UnknownHostException e) {	   
    
            e.printStackTrace();
        }
    }
    
    DatagramSocket dd;
    
    {	   	   
        try {   
    
            dd = new DatagramSocket(8080, InetAddress.getByName("127.0.0.1"));//随机端口号
        } catch (SocketException | UnknownHostException e) {	   
    
            e.printStackTrace();
        }
    }
    
    @Override
    public void run() {   
    
        while (true) {   
    
            message = scanner.nextLine();
            datagramPacket.setData(message.getBytes());
            try {     
                assert dd != null;
               dd.send(datagramPacket);//使用socket发送packet
            } catch (IOException e) {   
    
                e.printStackTrace();
            }
        }
    }
    

    }

    //接收端
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;

    public class UDPSocketClientthread implements Runnable {

    DatagramSocket datagramSocket;
    {	   
    
        try {		   
    
            datagramSocket = new DatagramSocket(8081);//匹配端口号
        } catch (SocketException e) {	   
    
            e.printStackTrace();
        }
    }
    
    byte[] ibuf = new byte[1024];
    DatagramPacket datagramPacket = new DatagramPacket(ibuf, ibuf.length);//接受数据和有效数据长度
    
    
    @Override
    public void run() {	   
    
        while (true) {	   
    
            try {	   
    
                datagramSocket.receive(datagramPacket);//接收packet
            } catch (IOException e) {	  
    
                e.printStackTrace();}
            System.out.println("Tom:" + new String(datagramPacket.getData(), 0, datagramPacket.getLength()));
        }
    }
    

    }

    展开全文
  • DatagramSocket And DatagramPacket
  • 在自己做socket编程的时候,用udp进行数据传送实现一对一的问题咨询的功能中,遇到了一个问题,DatagramPacket.getData()获取的数据的长度不是自己发送的数据长度,比如我发送的是"ss"字符串,接收到的长度应该为2,...

    在自己做socket编程的时候,用udp进行数据传送实现一对一的问题咨询的功能中,遇到了一个问题,DatagramPacket.getData()获取的数据的长度不是自己发送的数据长度,比如我发送的是"ss"字符串,接收到的长度应该为2,但是通过DatagramPacket.getData().length得到的数据长度并不是2,而是61440,但是DatagramPacket.getLength()得到的长度是2

    根据查找资料了解到:DatagramPacket.getData()反映了DatagramPacket对应缓冲区中的新接收到的数据和未被覆盖的旧数据,当我们使用DatagramPacket来处理新接收到的数据时,就容易同时触及到旧数据导致混乱,而DatagramPacket.getLength()反映的是刚刚接收到的数据的长度。所以DatagramPacket.getData().length与DatagramPacket.getLength()得到的长度不一样

    所以当你将代码写为下面的样式:

    while(true){
    	DatagramSocket server = new DatagramSocket(9999);
    	byte []data = new byte[1024*60];
    	DatagramPacket packet = new DatagramPacket(data,0,data.length);
    	server.receive(packet);
    	byte []datas = packet.getData();
    	String str = new String(datas,0,datas.length);
    	System.out.println(str);
    	if(str.equals("bye")){
    		break;
    	}
    }

    那么多次输出str两次后将会在控制台看到数据不一致,将会有之前的数据,数据发生了混乱,如图:

    导致的原因就是String str = new String(datas,0,datas.length);

    因为datas.length长度并不是发送的数据长度,所以最后str数据将会造成混乱,会有之前的数据。

    解决方法是通过int len = DatagramPacket.getLength()获取发送的数据的长度。再通过new String (datas,0,len);将字节数组构成字符串,得到的数据就将不会出错、混乱。

     

    展开全文
  • package test; import java.io.IOException;...import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Server { public static void...
  • java DatagramPacket

    2011-09-07 11:13:33
    一、DatagramPacket类: 如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。 构造函数:一个用来接收数据,一个用来发送数据 public DatagramPacket(byte[] buf,int
  •  a.DatagramPacket与DatagramSocket位于java.net包中  b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字  c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的...
  • I DatagramSocket II DatagramSocket 构造方法 III DatagramSocket 数据操作 IV DatagramPacket V DatagramPacket 构造方法 VI DatagramPacket 设置参数 ...VIII DatagramPacket IP 地址 端口号 说明
  • Java DatagramPacket 中的坑

    千次阅读 2019-05-19 04:04:25
    转载请注明来源 目录 问题说明 这里给出两种解决方法 方法一:使用getLength()截取更新的数据部分。下图中,使用substring(0,p....下图中,从第一次开始,都对DatagramPacket前getLength()个字节的数据进行...
  • Java DatagramPacket类、DatagramSocket类

    千次阅读 2018-07-15 10:09:22
    DatagramPacket类、DatagramSocket类放在java.net包中DatagramPacket类用来表示数据包DatagramPacket类的构造函数有:1、DatagramPacket(byte[]buf, intlength)构造函数创建DatagramPacket对象,指定了数据包的内存...
  • 一、DatagramSocket类二、DatagramPacket
  • 请问在发送DatagramPacket的时候是不是只能发送String类? 通常发送一个DatagramPacket的格式如下 ``` String msg = "你好!"; byte[] buf = msg.getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf...
  • 网络编程(DatagramSocket && DatagramPacket

    千次阅读 多人点赞 2019-08-05 10:41:40
    udp传输数据就好像在大海上运输货物,DatagramSocket就像的两个通信港口的码头,DatagramPacket就像在两端运输货物的轮船 发送端(send) 创建DatagramSocket,随机端口号 创建DatagramPacket,制定数据,长度,地址...
  • 1.DatagramPacket 需要发信息的host和port package edu.learn.foundation; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import ...
  • DatagramPacket与DatagramSocket 详解

    万次阅读 2015-04-07 15:49:52
     a.DatagramPacket与DatagramSocket位于java.net包中  b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字  c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠...
  • 客户端 package CH05; import java.net.InetAddress; import java.net.DatagramPacket; import java.net.MulticastSocket; public class Client ...
  • public static DatagramPacket receivePacket = new DatagramPacket(buf,buf.length); [/code] 接收和发送的时候receivePacket.getLength()都是1024,但是receivePacket.getData().length却是25600,有没有人能...
  • DatagramPacket DatagramPacket:UDP数据传输的数据包,接收或者发送的数据都是通过这个进行包装 常用构造方法 public DatagramPacket(byte buf[], int offset, int length) buf:传入一个空字节数组用来存储数据 ...
  • DatagramPacket DatagramSocket

    千次阅读 2006-02-21 10:47:00
    //接收数据import java.net.*;public class UDPTestServer { public static void main(String[] args) throws Exception { byte[] buffer = new byte... DatagramPacket dp = new DatagramPacket(buffer, buffer.l
  •  Java中的DatagramPacket与DatagramSocket的初步扩展的代码如下:1.接收端工程代码:由于接收端的控制台log会被发送端的log冲掉,所以把log写到文件中。package com.ameyume.receiver; import java.io.File; ...
  • 本文要解决的问题:初步了解并学习Java中的DatagramPacket与DatagramSocket的知识,并实现简单的通信。1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,...
  • Java中的UDP通信 UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和...DatagramPacket(byte[]
  • 使用DatagramSocket和DatagramPacket进行简单的通信 DatagramSocket此类表示用来发送和接收数据报包的套接字。 DatagramPacket此类表示数据报包。 package cn.sxt.UdpDemo; import java....
  • DatagramPacket对象

    2018-06-27 16:44:00
    // 发送端 ...DatagramPacket创建对象时,指定了数据的IP地址和端口号, receive 方法 --接收数据包 send 方法 -- 发送数据包   转载于:https://www.cnblogs.com/Jxliu/p/9234762.html
  • 1,UDP协议? 面向无连接,数据不安全,但速度快。不区分客户端与服务端。...DatagramPacket 数据报包用来实现无连接包投递服务。 3,代码实现 22222童鞋有点仰慕33333童鞋,下面是22222童鞋给33...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,749
精华内容 8,299
关键字:

datagrampacket