黑马程序员技术交流社区

标题: 导包后也无法使用类中的方法 [打印本页]

作者: 王龙彪    时间: 2012-7-19 18:49
标题: 导包后也无法使用类中的方法
本帖最后由 王龙彪 于 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. }
复制代码

作者: 张世威    时间: 2012-7-19 19:07


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

       这两句算这个类的什么?属性、方法、??

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






作者: 周玉龙    时间: 2012-7-19 19:13

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:15
张世威 发表于 2012-7-19 19:07
  • class UdpSend
  • {
  •     DatagramSocket ds = new DatagramSocket();

  • 谢谢提醒,本来是放到主类的一个方法里面的
    作者: 王宝康    时间: 2012-7-19 19:18
    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. }
    复制代码

    作者: 罗宵    时间: 2012-7-19 20:03
    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。




    欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2