udp小问题

corner1988 2012-04-20 06:08:41
public class Send implements Runnable{
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((br.readLine())!=null){
if("886".equals(line)){
break;
}
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10020);
ds.send(dp);


}
} catch (Exception e) {
throw new RuntimeException("发送失败");
}


}
}

public class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try {
while(true){
byte [] buffer=new byte[1024];
DatagramPacket dp=new DatagramPacket(buffer, buffer.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+data);

}

} catch (Exception e) {
throw new RuntimeException("接收失败");
}
}
}

public class chatDemo {

/**
* @param args
*/
public static void main(String[] args) throws Exception{
DatagramSocket sendS=new DatagramSocket(10020);
DatagramSocket receS=new DatagramSocket(10020);
new Thread(new Send(sendS)).start();
new Thread(new Rece(receS)).start();


}

}
代码无问题
第一次运行 报发送失败
然后就报异常
Exception in thread "main" java.net.SocketException: Unrecognized Windows Sockets error: 0: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)
at java.net.DatagramSocket.bind(DatagramSocket.java:368)
at java.net.DatagramSocket.<init>(DatagramSocket.java:210)
at java.net.DatagramSocket.<init>(DatagramSocket.java:261)
at java.net.DatagramSocket.<init>(DatagramSocket.java:234)
麻烦帮忙下,怎么回事呢
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
corner1988 2012-04-20
  • 打赏
  • 举报
回复
找了找 代码有问题,已经解决了
corner1988 2012-04-20
  • 打赏
  • 举报
回复
asa
Exception in thread "Thread-1" java.lang.RuntimeException: 发送失败
at chatDemo.Send.run(Send.java:31)
at java.lang.Thread.run(Thread.java:619)

怎么会失败呢
njclsc 2012-04-20
  • 打赏
  • 举报
回复
最好用InetSocketAddress类加载你的地址信息,这样要好点 嘿嘿
sdojqy1122 2012-04-20
  • 打赏
  • 举报
回复
当然你的收线程要先开启,后果可能收不到消息。报错是端口号问题。
new Thread(new Rece(receS)).start();//要先开启
Thread.sleep(2000);
new Thread(new Send(sendS)).start();
sdojqy1122 2012-04-20
  • 打赏
  • 举报
回复
sendS 就不要端口号吧?
改成DatagramSocket sendS=new DatagramSocket();
反正你这报错跟端口号有关系。
先试下吧,再看看

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧