黑马程序员技术交流社区

标题: <毕向东_Java基础视频教程第23天-09-网络编程>异常求解 [打印本页]

作者: 徐鑫    时间: 2012-4-22 09:03
标题: <毕向东_Java基础视频教程第23天-09-网络编程>异常求解
本帖最后由 徐鑫 于 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, 下载次数: 46)

1.png

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

接收端

接收端

作者: 毕博    时间: 2012-4-22 09:12
Address is using cannot bind
地址正在使用?不能绑定。

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

端口号我已经换了3次运行了,ip是自己的,如果可以,你可以尝试运行下。
作者: 徐鑫    时间: 2012-4-22 10:33
连琛琛 发表于 2012-4-22 10:20
楼主好,你是在局域网中么?192.168.1.3是局域网中的ip地址,要跟自己,地址最好写成:127.0.0.1 ...

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

兄弟,那个是UDP协议类(DatagramSocket)自带的方法。
作者: 戴振良    时间: 2012-4-22 23:07
本帖最后由 戴振良 于 2012-4-22 23:09 编辑

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




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