我最近用JAVA编写了一个类似于QQ的JAVA程序.当关闭客户端主界面时,对每位好友发出一个DATAGRAM,
但是好友收到信息后的处理方式却存在问题.不知道是什么原因

解决方案 »

  1.   

    如果只是在收到消息后处理出现问题,就不是UDP传输的问题。自己多check你的代码吧。
      

  2.   

    本人是在本机上测试,代码大致说一下
    datagramsocket ds=new datagramsocket(qQ端口号);
    byte[] buffer=new byte[256];
    datagrampacket dp=new datagrampacket();
    while(true){
      dp=ds.accept();
      string data=new String(dp.getData());
      if(data.subtring(0,6).equals("online"){
        Online(data);
      }else{
        if(data.substring(0,7).equals("offline"){
          Offline(data);
        }
      }
    }
    .....
    //关闭主窗口时
    {
      datagramsocket ds=new datagramsocket();
      datagrampacket dp=new datagrampacket();
      for(int i=0;i<朋友数;i++){
        byte[] buffer=new byte[256];
        buffer="offline"+本人ICQ号;
        dp=new datagrampacket(buffer,buffer.length,IP,朋友端口号);
        ds.send(dp);
      }
      system.out.println(buffer);
    }
    问题就在这,它输出的结果却不同
    比如:
    offline1000
    offline100
    offline1(不确定)
    ....
    这是什么原因?哪位高手知道
      

  3.   

    消息处理方式也存在问题,我将offline改为ofline;输出结果就一致了,都是ofline1000,但是同样收到这个消息,有的好友是做了ofline处理,但是有的却做了talk处理(聊天处理);
    我想这会不会是多线程的理解不对?
    class Main extends JFrame implements Runnable{
      public Main(){
        init();//初始化界面
        Thread thr=new Thread(this);
        thr.start(); 
      }
      public void run(){
        datagramsocket ds=new datagramsocket(qQ端口号);
        byte[] buffer=new byte[256];
        datagrampacket dp=new datagrampacket();
        while(true){
       dp=ds.accept();
       string data=new String(dp.getData());
        if(data.subtring(0,6).equals("online"){
          Online(data);
        }else{
          if(data.substring(0,6).equals("ofline"){
          Offline(data);
          }
          else(data.substring(0,6).equals("talkto"){
           Talk(data,icqno);
          }
        }
      }
       //关闭窗口处理(省略);
    }
      

  4.   

    有的好友执行的是Offline(),而有的却是执行Talk(),怪事!
      

  5.   

    datagramsocket ds=new datagramsocket(qQ端口号);...... dp=ds.accept();
    楼主,这句话是有问题的吧?这可不是UDP的方式啊,是TCP啊,改成dp=ds.receive();
      

  6.   

    我知道问题所在了,是没有synchronized造成莫名其妙的错误,不过还是得谢大家