Chat chat=new Chat();
有Chat这个类吗?

解决方案 »

  1.   

    还是连chat一起全贴了
    好像又改动不少。
      

  2.   

    呵呵,还好基本上没怎么改啊,估计不用贴那个啊,既然大家有要求就满足!
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;class Chat extends Frame {
    List lst = new List(6);
    TextField tfIP = new TextField(15);
    TextField tfData = new TextField(20);
    Button b = new Button("机器人");
    DatagramSocket ds = null;
    public Chat() {
    try{
    ds=new DatagramSocket(3000);
           }
           catch(Exception e)
           {
            e.printStackTrace();
           }
    this.add(lst,"Center");
    Panel p =new Panel();
    this.add(p,"South");

    p.setLayout(new BorderLayout());
    p.add(tfIP,"West");
    p.add(b,"Center");
    p.add(tfData,"East");
    setSize(400, 400);
    setTitle("Chat");
    setVisible(true);


    b.addActionListener(new ActionListener()
       {
        public void actionPerformed(ActionEvent e)
        {
        ds.close();
          dispose();
        Chat1 chat1=new Chat1();
        }
        });


    new Thread(new Runnable()
     {
      public void run()
      {
      byte buf[] = new byte[1024];
      DatagramPacket dp = new DatagramPacket(buf,1024);
      while(true)
      {
      try{
         ds.receive(dp);
         lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0);
              String s=new String(buf,0,dp.getLength());
                
              }
              catch(Exception e)
              {
               if(!ds.isClosed())
               {
               e.printStackTrace();
                   }
              }
           }
       }
     
      }).start();

    tfData.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
         byte [] buf;
         buf = tfData.getText().getBytes();
         try{
              DatagramPacket dp=new DatagramPacket(buf,buf.length,
               InetAddress.getByName(tfIP.getText()),3000);
                ds.send(dp);
             } 
             catch(Exception ex)
             {
              ex.printStackTrace();
              }
         tfData.setText("");
        }
    });

    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    ds.close();
    dispose();
    System.exit(0);
    }
    }); } public static void main(String args[]) {
    System.out.println("Starting Chat...");
    Chat mainFrame = new Chat();
    mainFrame.setSize(400, 400);
    mainFrame.setTitle("Chat");
    mainFrame.setVisible(true);
    mainFrame.setResizable(false);
    }
    }
    没什么改变的!
      

  3.   

    当然是发过了啊,都写(2)了啊,呵呵 大家支持啊!特别是febchen() ,上次只有这位大侠指点,希望这次也不吝赐教啊!
      

  4.   

    你想谋杀我的爱机啊,呵呵,一按机器人CPU就发烧了。
    你想实现什么功能,能告诉我吗?
      

  5.   

    怎么可能,机器人那个只是把原来的端口和窗口关闭然后再弹出个窗口,功能嘛不是很麻烦,Chat里就是简单的聊天程序,机器人的那个可以根据受到的信息自动回复啊!现在在自动恢复那有些问题,所以特来请教
      

  6.   

    改了一下
    在////////////中
    有些不协调,意思应该差不多把。aa.txt中的内容如下,至少4行
    你好

    1
    再见
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import javax.swing.*;
    import java.io.*;class Chat1 extends Frame {
    List lst = new List(6);
    TextField tfIP = new TextField(15);
    TextField tfData = new TextField(20);
    Button b = new Button("È¡Ïû»úÆ÷ÈË");
    DatagramSocket ds = null;
    public Chat1() {
    try{
    ds=new DatagramSocket(3000);
           }
           catch(Exception e)
           {
            e.printStackTrace();
           }
    this.add(lst,"Center");
    Panel p =new Panel();
    this.add(p,"South");

    p.setLayout(new BorderLayout());
    p.add(tfIP,"West");
    p.add(b,"Center");
    p.add(tfData,"East");
    setSize(400, 400);
    setTitle("Chat1");
    setVisible(true);

    b.addActionListener(new ActionListener()
       {
        public void actionPerformed(ActionEvent e)
        {
        ds.close();
          dispose();
        Chat chat=new Chat();
        }
        });


    new Thread(new Runnable()
     {
      public void run()
      {
      byte buf[] = new byte[1024];
      DatagramPacket dp = new DatagramPacket(buf,1024);
      while(true)
      {
      try{
         ds.receive(dp);
         lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+ dp.getPort(),0);
             
              try{FileReader f=new FileReader("c:\\aa.txt");
                            BufferedReader buff = new BufferedReader(f);
                           String s=new String(buf,0,dp.getLength());
                            int x=0;
                            //////////////
                            String s1="";
                            while((s1=buff.readLine())!=null)
                               {if(s1.equals(s))
                                   break;
                               x++;}
                            ///////////////
                               if(x==0)
                                lst.add("ÄãºÃ");
                               if(x==1)
                                lst.add("ÎÒÊÇÐÇ×ùÅж¨³ÌÐò£¬ÒªÊÔÊÔÂð£¿"); 
                               if(x==2) 
                                lst.add("Çë°´¿ªÊ¼¼ü"); 
                               if(x==3)
                                {System.out.println("»¶Ó­ÔÙ´ÎʹÓã¡");
                                 System.out.println(" ×÷ÕߣºÂÀá¿");
                                  System.exit(0);}                            
                                                  }catch(Exception exx)
                            {System.out.println(exx.toString());}
              }
              catch(Exception e)
              {
               if(!ds.isClosed())
               {
               e.printStackTrace();
                   }
              }
           
           }
       }
     
      }).start();

    tfData.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
         byte buf[] = new byte[1024];
        //DatagramPacket dp = new DatagramPacket(buf,1024);
        //String s=new String(buf,0,dp.getLength());
        
         byte [] buf1;
         buf1 = tfData.getText().getBytes();
         try{ 
              DatagramPacket dp1=new DatagramPacket(buf1,buf1.length,
               InetAddress.getByName(tfIP.getText()),3000);
                ds.send(dp1);
             } 
             catch(Exception ex)
             {
              ex.printStackTrace();
              }
         tfData.setText("");
        }
    });

    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    ds.close();
    dispose();
    System.exit(0);
    }
    });
    }
    }
      

  7.   

    还是不行啊,不能自动回复…… 我是自己试的,我给自己发信息应该也能看到自动的回复,但是还是没有,和Chat一样啊,只能接收没有自动的回复,以前做的是输入一段话需要一个按钮才能根据aa.txt自动回复现在只是想在收到的时候就能回复了。恩 ,大概是这个意思,就是让收到信息这个时间触发自动回复的事件。
      

  8.   

    确实有些晕还没试过远程的把发送信息的代码从
    actionPerformed(ActionEvent e)
    中提取出来,专门写一个发送方法,发送信息作为参数,
    如:
    sendMessage(String msg);
    然后
    将 lst.add("你好");
    这个地方改成发送方法发送,如
    sendMessage("你好");提个思路,今天没环境,自己试验把。
      

  9.   

    恩  我倒是有点想法了,不过ds.send发送的是数据包啊,正琢磨怎么转化呢。应该是有个什么IO的是直接读成字节的,就不用了BufferedReader了吧!
      

  10.   

    俺看晕了!没办法,是初学者!
    顺便问一个很傻的问题,怎样能用java使两个电脑交换数据!
      

  11.   

    真是爱莫能助,没有用DatagramPacket通信过,你查查有关socket通信的例子程序把,应该很多的,也许会有帮助。