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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐鑫 于 2012-4-23 13:03 编辑

以下代码可以直接进行编译,运行
import java.net.*;
import java.io.*;
class udpSend2{
public static void main(String args[]) throws Exception{
  DatagramSocket ds = new DatagramSocket();
  BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in));
  byte[] data = new byte[1024];
  String line = null;
  while((line = buffr.readLine())!= null){
   if(line.equals("886"))break;
   data = line.getBytes();
   DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("192.168.1.3"),10024);
   ds.send(dp);
  }
  ds.close();
}
}
class udpReceive2{
public static void main(String args[]) throws Exception{
  while(true){
   DatagramSocket ds = new DatagramSocket(10024);
   byte[] bytes = new byte[1024];
   DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
   ds.receive(dp);
   String ip = dp.getAddress().getHostAddress();
   String data = new String(dp.getData(),0,dp.getLength());
   System.out.println(ip+"::"+data);
  }
  
}
}

这是毕老师网络编程UDP协议通信的例子,代码在运行时,发送端发送第一个内容时,接收端接收到了但同时报了Address is using cannot bind....求高手指点

1.png (18.35 KB, 下载次数: 45)

1.png

2.png (45.8 KB, 下载次数: 66)

接收端

接收端

7 个回复

倒序浏览
Address is using cannot bind
地址正在使用?不能绑定。

换下接口号,还有你的ip是你自己的吗 ,如果想跟自己玩,ip得设成自己的ip
回复 使用道具 举报
毕博 发表于 2012-4-22 09:12
Address is using cannot bind
地址正在使用?不能绑定。

端口号我已经换了3次运行了,ip是自己的,如果可以,你可以尝试运行下。
回复 使用道具 举报
连琛琛 发表于 2012-4-22 10:20
楼主好,你是在局域网中么?192.168.1.3是局域网中的ip地址,要跟自己,地址最好写成:127.0.0.1 ...

谢谢回复,我尝试使用回还地址试了,还是接收到第一个信息然后就报错。
回复 使用道具 举报
send()
receive()
这两个方法你没定义怎么调用的
回复 使用道具 举报
邵中国 发表于 2012-4-22 13:32
send()
receive()
这两个方法你没定义怎么调用的

兄弟,那个是UDP协议类(DatagramSocket)自带的方法。
回复 使用道具 举报
戴振良 黑马帝 2012-4-22 23:07:31
7#
本帖最后由 戴振良 于 2012-4-22 23:09 编辑

我没运行过你的代码,不过我看到你第二个class中的代码:
while(true){
   DatagramSocket ds = new DatagramSocket(10024);
这里用了循环,第一次循环的时候,就已经绑定了10024端口,循环第二次的时候又想绑定这个端口,肯定是绑不了了,因为已经被绑过了,
解决方案:可以把DatagramSocket ds = new DatagramSocket(10024);放到while之外,不让这个语句循环即可解决问题,貌似这个语句也不需要循环,循环它没什么好处吧!重点需要循环的是receive()方法,对吧!

点评

已解决,完全正确,看来我学的不仔细,谢谢指点  发表于 2012-4-23 13:02
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马