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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kylin_huang 初级黑马   /  2012-10-30 01:24  /  1740 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package kylin.javase.udpStork;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/*
* *  聊天
* 分析
* 读取信息
* 发送信息
*
* */

public class Chat {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  
  new Thread(new ReceiveThread()).start();
  new Thread(new SendThread()).start();
  
  //receive();
  //send();
  
}
  
}
class ReceiveThread extends Thread
{
  public void run() {
   
   DatagramSocket re = null;
   try {
    re = new DatagramSocket(2250);
   } catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  while (true) {
  byte[] buf = new byte[1024];
  DatagramPacket dp = new DatagramPacket(buf,buf.length);
  try {
   re.receive(dp);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();}
  }
}
}



class SendThread extends Thread
{
  public void run() {
   DatagramSocket send = null;
   try {
    send = new DatagramSocket(2250);
   } catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   
   while (true) {
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    try {
     while((line=bufr.readLine())!=null){
      byte[] buf = line.getBytes();
     DatagramPacket dp= new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.123"), 2250);
     send.send(dp);
}
    } catch (UnknownHostException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   
   }
  }
}

  



java.net.BindException: Address already in use: Cannot bind
at java.net.TwoStacksPlainDatagramSocketImpl.bind0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
at java.net.TwoStacksPlainDatagramSocketImpl.bind(TwoStacksPlainDatagramSocketImpl.java:81)
at java.net.DatagramSocket.bind(DatagramSocket.java:376)
at java.net.DatagramSocket.<init>(DatagramSocket.java:231)
at java.net.DatagramSocket.<init>(DatagramSocket.java:284)
at java.net.DatagramSocket.<init>(DatagramSocket.java:256)
at kylin.javase.udpStork.ReceiveThread.run(Chat.java:54)
at java.lang.Thread.run(Thread.java:722)
Exception in thread "Thread-1" java.lang.NullPointerException
at kylin.javase.udpStork.ReceiveThread.run(Chat.java:63)
at java.lang.Thread.run(Thread.java:722)
java.net.BindException: Address already in use: Cannot bind
at java.net.TwoStacksPlainDatagramSocketImpl.bind0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
at java.net.TwoStacksPlainDatagramSocketImpl.bind(TwoStacksPlainDatagramSocketImpl.java:81)
at java.net.DatagramSocket.bind(DatagramSocket.java:376)
at java.net.DatagramSocket.<init>(DatagramSocket.java:231)
at java.net.DatagramSocket.<init>(DatagramSocket.java:284)
at java.net.DatagramSocket.<init>(DatagramSocket.java:256)
at kylin.javase.udpStork.SendThread.run(Chat.java:78)
at java.lang.Thread.run(Thread.java:722)

  
  
  
  


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

2 个回复

倒序浏览
Address already in use: Cannot bind
意思是端口被占用了,不能绑定。最好选择一个10000以上的端口(我不是说1024以外的不行啊)
而且,当这个程序运行之后,如果你还想要再次运行,就应该修改一下端口号。因为上次的端口号在内存中还存在(意思说还在占用)。
所以,运行一次,修改一下端口号,就行了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
太感谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马