A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王龙彪 中级黑马   /  2012-7-19 18:49  /  2263 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王龙彪 于 2012-7-19 22:18 编辑
  1. import java.net.*;

  2. public class UdpTest
  3. {
  4.     public static void main(String[] args)throws Exception
  5.     {
  6.         //new UdpSend();
  7.         System.out.print("hahaha");
  8.     }
  9.    
  10.     public static void sop(Object object)
  11.     {
  12.         System.out.println(object);
  13.     }
  14. }

  15. class UdpSend
  16. {
  17.     DatagramSocket ds = new DatagramSocket();
  18.     byte[] buffer = "vivi vikarm ...".getBytes();
  19.     DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 4444);
  20.    
  21.     ds.send(buffer);////就是这里,我已经导入包了,还是无法使用send()函数,下面的close()也一样报错
  22.     ds.close();
  23. }
复制代码

5 个回复

倒序浏览
  • class UdpSend
  • {
  •     DatagramSocket ds = new DatagramSocket();
  •     byte[] buffer = "vivi vikarm ...".getBytes();
  •     DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 4444);
  •     ds.sent(buffer);////就是这里,我已经导入包了,还是无法使用sent()函数,下面的close()也一样报错
  •     ds.close();
  • }


1、你看看你这个类能这样写吗?

   
  • ds.sent(buffer);////就是这里,我已经导入包了,还是无法使用sent()函数,下面的close()也一样报错
  •     ds.close();
   这两句算这个类的什么?属性、方法、??

1
2、建议你把这2局放到一个方法里面。





回复 使用道具 举报

DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,

DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。

send(DatagramPacket p):以该DatagramSocket对象向外发送数据报。





使用DatagramSocket发送数据报时,DatagramSocket并不知道将该数据报发送到哪里,而是由DatagramPacket自身决定数据报的目的。就像码头并不知道每个集装箱的目的地,码头只是将这些集装箱发送出去,而集装箱本身包含了该集装箱的目的地。

我觉得楼主应该是把那个方法名写错了。sent应该是想写成send,我在API没有找到楼主写的sent方法。而且send方法的参数必须是DatagramPacket类的一个对象,可以把它看成一个包裹。
而不能是一个byte类型的数组。所以说参数错了。
他不产生IO流。所以不存在关流的closed()方法。希望对你有帮助。

回复 使用道具 举报
张世威 发表于 2012-7-19 19:07
  • class UdpSend
  • {
  •     DatagramSocket ds = new DatagramSocket();

  • 谢谢提醒,本来是放到主类的一个方法里面的
    回复 使用道具 举报
    java类中只是定义它的属性,以及对外提供的方法,send()以及是close()方法是通过对象调用的
    1. package demo;

    2. import java.net.DatagramPacket;
    3. import java.net.DatagramSocket;
    4. import java.net.InetAddress;


    5. public class UdpTest
    6. {
    7.     public static void main(String[] args)throws Exception
    8.     {
    9.             DatagramSocket ds = new DatagramSocket();
    10.             byte[] buffer = "vivi vikarm ...".getBytes();

    11.               DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 4444);

    12.               ds.send(dp);
    13.               ds.close();           
    14.         System.out.print("hahaha");
    15.     }
    16.    
    17. }
    复制代码
    回复 使用道具 举报
    class UdpSend
    {
        DatagramSocket ds = new DatagramSocket();
        byte[] buffer = "vivi vikarm ...".getBytes();
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 4444);
       
        ds.send(buffer);////就是这里,我已经导入包了,还是无法使用send()函数,下面的close()也一样报错
        ds.close();
    }
    send()方法里面应该是打包的dp,不是放数组buffer。

    点评

    是的,已经改过来了.嘿嘿  发表于 2012-7-19 22:15
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马