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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘茂林 于 2013-5-31 09:47 编辑
  1. import java.net.*;
  2. public class UdpSend
  3. {
  4.     public static void main(String[] args)throws Exception
  5.     {
  6.         //1,创建UDP服务,通过DatagramSocket
  7.         DatagramSocket ds = new DatagramSocket();
  8.         
  9.         //2,确定数据,并封装成数据包 DatagramSocket(byte[] b
  10.         
  11.         byte[] buf = "udp chu xian ".getBytes();
  12.         DatagramPacket dp =
  13.                 new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
  14.         
  15.         //3,通过socket服务,将已有的数据包发送出去,通过send方法
  16.         ds.send(dp);
  17.         
  18.         //4,关闭资源
  19.         ds.close();
  20.     }

  21. }



  22. import java.net.*;
  23. public class UdpRece
  24. {
  25.     public static void main(String[] args)throws Exception
  26.     {
  27.         //1,创建udp socket,建立端点
  28.         DatagramSocket ds = new DatagramSocket(10000);
  29.         
  30.         //2,定义数据包,用于存储数据。
  31.         byte[] buf = new byte[1024];
  32.         
  33.         DatagramPacket dp = new DatagramPacket(buf, buf.length);
  34.         
  35.         //3,通过服务的receeive方法将接收到的数据存入数据包中。
  36.         ds.receive(dp);
  37.         
  38.         //4,通过数据包的方法获取其中的数据  (有获取地址,长度,端口等)
  39.         String ip = dp.getAddress().getHostAddress();//获取IP
  40.         
  41.         //获取数据
  42.         String data = new String(dp.getData() , 0 , dp.getLength());
  43.          
  44.         //获取端口
  45.         int port = dp.getPort();
  46.                
  47.         System.out.println(ip + "::" + data + "::" + port);
  48.                
  49.         //关闭资源
  50.         ds.close();
  51.                
  52.         
  53.         
  54.     }
  55. }

复制代码
第一个是发送端  第二个是接收端  问题是接收端开起来   发送端一编译 运行 就出现错误 求解释

7 个回复

倒序浏览
  你把修饰类的 public 去掉好不好  怎么可能2个 public 类呢
    这个是常识性问题额......... 编译器的时候有提示吧
回复 使用道具 举报
什么错误啊?运行正常啊。127.0.0.1::udp chu xian ::1431
回复 使用道具 举报
2楼说的很对,如果是在一个Java文件里面怎么可能会有两个public 呢!并且也要把26行的import java.net.*;去掉,前面已经导入过了。这样你再试试。
回复 使用道具 举报
1.我想楼主的代码,应该是从2个java文件里面贴上来的吧?即:
  1. import java.net.*;
  2. public class UdpSend
  3. {
  4.     public static void main(String[] args)throws Exception
  5.     {
  6.         //1,创建UDP服务,通过DatagramSocket
  7.         DatagramSocket ds = new DatagramSocket();
  8.         
  9.         //2,确定数据,并封装成数据包 DatagramSocket(byte[] b
  10.         
  11.         byte[] buf = "udp chu xian ".getBytes();
  12.         DatagramPacket dp =
  13.                 new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
  14.         
  15.         //3,通过socket服务,将已有的数据包发送出去,通过send方法
  16.         ds.send(dp);
  17.         
  18.         //4,关闭资源
  19.         ds.close();
  20.     }

  21. }
复制代码
这放在了一个类里,其它的放在了另外个类里运行的吧?那就不存在2楼和4楼说的情况

2.如果楼主运行时出现的错误提示有这么写的:Address already in use: cannot Bind
那就是告诉楼主这个端口已经被使用了,你把代码中10000的端口换下 找个没用到的端口就行了
回复 使用道具 举报
w270307032 发表于 2013-5-30 11:13
1.我想楼主的代码,应该是从2个java文件里面贴上来的吧?即:这放在了一个类里,其它的放在了另外个类里运 ...

是啊 是放在两个文件里面的  
D:\Student\java\workspace\Socket\src\Socket2>java UdpSend
Exception in thread "main" java.lang.NoClassDefFoundError: UdpSend (wrong name:
Socket2/UdpSend)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

启动发送端出现这个错误
回复 使用道具 举报
这种问题,有时候不是代码的问题。也许你先运行接收端,或者用Mycelipes重启一下就好了。。
比较纠结。。。。
回复 使用道具 举报
好吧 我重新写了一遍。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马