2 u010898988 u010898988 于 2013.05.30 21:45 提问

关于java的聊天程序,分服务端和客户端,请java大神帮我调试一下,我检查没编写错误
//服务端
package chatApp;

import java.net.*;
import java.io.*;
import java.util.*;

public class chatserverthree implements Runnable
{
   public static final int PORT=1234;
   protected ServerSocket listen;
   static Vector connections;
   Thread connect;

   public chatserverthree()
   {
       try
       {
           listen=new ServerSocket(PORT);
       }
       catch(UnknownHostException e2)
       {
           System.err.println("erro:"+e2);
       }
       catch(IOException e)
       {
           System.err.println("erro:"+e);
           System.exit(1);
       }
       connections=new Vector(1000);
       connect=new Thread(this);
       connect.start();
   }
   public static void main(String args[])
   {
       new chatserverthree();
       System.out.println("Chat Server is starting!......");
   }
   public void run()
   {
       try
       {
           while(true)
           {
               Socket client=listen.accept();
               firstthread f=new firstthread(this,client);
               f.setPriority(Thread.MIN_PRIORITY);
               f.start();
               connections.addElement(f);
           }
       }
       catch(IOException e)
       {
           System.err.println("Erro:"+e);
           System.exit(1);
       }
   }
   public void broadcast(String msg)
   {
       int i;
       firstthread you;
       for(i=0;i<connections.size();i++)
       {
           you=(firstthread)connections.elementAt(i);
           try
           {
               you.out.writeUTF(msg);
           }
           catch(IOException e){}
       }
   }

   public void broadcast1(String msg)
   {
      int i;
      String s1,s2,s3;
      firstthread you;
      s1=new String("PEOPLE");
      s2=new String(msg.substring(4));
      s3=s1.concat(s2);
      for(i=0;i<connections.size();i++)
      {
         you=(firstthread)connections.elementAt(i);
         if(s3.startsWith(you.name))
         {
             try
             {
                 you.out.writeUTF(msg);
             }
             catch(IOException e){}
         }
      }
   }
}

class firstthread extends Thread
{
    protected Socket client;
    String line,name;
    protected DataOutputStream firstout,out;
    protected chatserverthree server;
    protected DataInputStream in;

    public firstthread(chatserverthree server,Socket client)
    {
        this.server=server;
        this.client=client;
        try
        {
            in=new DataInputStream(client.getInputStream());
            out=new DataOutputStream(client.getOutputStream());
            firstout=new DataOutputStream(client.getOutputStream());
        }
        catch(IOException e)
        {
            try
            {
                server.connections.removeElement(this);
                client.close();
            }
            catch(IOException e2)
            {
                System.err.println("有问题哦:"+e);
                return;
            }
        }
        if(this.client==null)
        {
            server.broadcast("QUIT"+this.name);
            this.name=null;
        }
    }
    public void run()
    {
        try
        {
            for(int i=0;i<server.connections.size();i++)
            {
                firstthread c=(firstthread)(server.connections.elementAt(i));
                if(c.name!=null)
                {
                    try
                    {
                        firstout.writeUTF(c.name+"*");
                    }
                    catch(IOException e){}
                }
            }
        }
        catch(ArrayIndexOutOfBoundsException e){}
        catch(NullPointerException e){}
        try
        {
            while(true)
            {
                line=in.readUTF();
                if(line.startsWith("PEOPLE"))
                {
                    try
                    {
                        firstthread d=(firstthread)(server.connections.elementAt
                        (server.connections.indexOf(this)));
                        if(d.name==null)
                        {
                            d.name=line;
                        }
                        else if(d.name!=null)
                        {
                            server.broadcast("QUIT"+this.name);
                            d.name=line;
                        }
                    }
                    catch(ArrayIndexOutOfBoundsException e){}
                    catch(NullPointerException e){}
                    finally
                    {
                        server.broadcast(line);
                    }
                }
                else if(line.startsWith("QUIT"))
                {
                    server.broadcast("QUIT"+this.name);
                    server.connections.removeElement(this);
                    this.in.close();
                    this.out.close();
                    this.firstout.close();
                    this.client.close();
                    this.yield();
                }
                else if(line.startsWith("MSG"))
                {
                    server.broadcast(line);
                }
                else if(line.startsWith("悄悄地对"))
                {
                    this.out.writeUTF(line);
                    server.broadcast1(line);
                }
                else if(line.startsWith("newlist"))
                {
                    try
                    {
                        for(int i=0;i<server.connections.size();i++)
                        {
                            firstthread c=(firstthread)(server.connections.elementAt(i));
                            if(c.name!=null)
                            {
                                try
                                {
                                    firstout.writeUTF(c.name+"*");
                                }
                                catch(IOException e){}
                            }
                        }
                    }
                    catch(ArrayIndexOutOfBoundsException e){}
                    catch(NullPointerException e){}

                }
            }
        }
        catch(IOException e)
        {server.connections.removeElement(this);}
        catch(NullPointerException e)
        {server.connections.removeElement(this);}
    }
}


//客户端
package chatApp;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

 class Mywindow extends Frame implements ActionListener 
 {
    TextField text1;
    TextField text2;
    Button button1;
    Button button2;

    Mywindow()
    {
      super("发悄悄话窗口");
      setLayout(new GridLayout(3,2));
      text1=new TextField(12);
      text2=new TextField(8);
      button1=new Button("送出悄悄话");
      button2=new Button("关闭此窗口");
      add(new Label("送悄悄话到:"));
      add(text1);
      add(new Label("输入您的悄悄话:"));
      add(text2);
      add(button2);
      add(button1);
      setSize(400,190);
      text1.setEditable(false);
      setVisible(false);
      button1.addActionListener(this);
      button2.addActionListener(this);
      setBackground(Color.pink);
      addWindowListener(new WindowAdapter()
      {
          public void windowClosing(WindowEvent e)
          {
              setVisible(false);
              System.exit(0);
          }
      }
      );

 }

 public void actionPerformed(ActionEvent e)
 {
     if(e.getSource()==button1)
     {
        try{chatappletthree.out.writeUTF("悄悄地对"+text1.getText()
                +"说:"+text2.getText()+"(我是"+chatappletthree.name+")"); 
        }
        catch(IOException e1){}
     }
     else if(e.getSource()==button2)
     {
         this.setVisible(false);
     }
 }
 }

class Apanel extends Panel
{
    TextField name_txt;
    Button button1,button2;
    Checkbox box1,box2,box3;
    CheckboxGroup sex;
    Apanel()
    {
        name_txt=new TextField(10);
        button1=new Button("进入聊天室");
        button2=new Button("退出聊天室");
        setLayout(new FlowLayout());
        sex=new CheckboxGroup();
        box1=new Checkbox("男 M",false,sex);
        box2=new Checkbox("女 F",false,sex);
        box3=new Checkbox("蘑菇",true,sex);
        add(new Label("输入昵称"));
        add(name_txt);
        add(box1);
        add(box2);
        add(box3);
        add(button1);
        add(button2);
        add(new Label(""));
    }
}

class Bpanel extends Panel
{
    TextArea chat_txt;
    B2panel b2;

    Bpanel()
    {
        chat_txt=new TextArea(25,75);
        b2=new B2panel();
        chat_txt.setVisible(false);
        setLayout(new FlowLayout());
        add(chat_txt);
        add(b2);
    }
}
class B2panel extends Panel
{
    java.awt.List list;
    B2panel()
    {
        try
        {
            list=new java.awt.List(25,false);
        }
        catch(NullPointerException e){}
        setLayout(new BorderLayout());
        add("Center",list);
        add("North",new Label("聊天者列表:"));
        add("East",new Label());
        add("South",new Label("双击某昵称可悄悄话"));
    }
}

 class Cpanel extends Panel
 {
     TextField msg_txt;
     Button button1,button2,button3;
     Cpanel()
     {
         msg_txt=new TextField(44);
         button1=new Button("送出");
         button2=new Button("刷新谈话区");
         button2=new Button("刷新聊天者列表");
         setLayout(new FlowLayout());
         add(new Label("您要说的话:"));
         add(msg_txt);
         add(button1);
         add(button2);
         add(button3);
     }
 }
 public class chatappletthree extends Applet implements Runnable,
 ActionListener,ItemListener
 {
     public static final int PORT=1234;
     static String name,xingbie;
     Socket socket;
     int jilu,enter=0;
     DataInputStream in;
     static DataOutputStream out;
     Thread thread;
     String line;
     static Apanel a;
     static Bpanel b;
     static Cpanel c;
     static Mywindow mywindow;

     public void init()
     {
         mywindow=new Mywindow();
         setBackground(new Color(113,163,139));
         setLayout(new BorderLayout());
         a=new Apanel();
         b=new Bpanel();
         c=new Cpanel();
         add("North",a);
         add("Center",b);
         add("South",c);
         a.button1.addActionListener(this);
         a.button2.addActionListener(this);
         c.button1.addActionListener(this);
         c.button2.addActionListener(this);
         c.button3.addActionListener(this);
         a.box1.addItemListener(this);
         a.box2.addItemListener(this);
         a.box3.addItemListener(this);
         b.b2.list.addActionListener(this);
         add("East",new Label());
         add("West",new Label());
         jilu=0;
         this.setForeground(Color.black);
         c.msg_txt.setBackground(Color.white);
         b.chat_txt.setBackground(new Color(200,185,220));
         b.chat_txt.setFont(new Font("TimeRoman",Font.PLAIN,12));
     }
     public void start()
     {
        this.getCodeBase().getHost();
        try
        {
            socket=new Socket(this.getCodeBase().getHost(),PORT);
            in=new DataInputStream(socket.getInputStream());
            out=new DataOutputStream(socket.getOutputStream());
        }
        catch(IOException e)
        {
            this.showStatus(e.toString());
            say("欢迎来这里!");
            System.exit(1);
        }
        say("          欢迎来到红蜘蛛聊天室                        ");
        if(thread==null)
        {
            thread=new Thread(this);
            thread.setPriority(Thread.MIN_PRIORITY);
            thread.start();
        }
     }
     public void stop()
     {
         try
         {
             out.writeUTF("QUIT");
         }
         catch(IOException e){}
     }
     public void destroy()
     {
         try
         {
             socket.close();
         }
         catch(IOException e)
         {
             this.showStatus(e.toString());
         }
         if((thread!=null)&&thread.isAlive())
         {
             thread.yield();
             thread=null;
         }
     }
     public void run()
     {
         String line;
         try
         {
             while(true)
             {
                 line=in.readUTF();
                 if(line.startsWith("PEOPLE"))
                 {
                     String listString=line;
                     if(line.endsWith("*"))
                     {
                         listString=line.substring(0, (line.length()-1));
                     }
                     b.b2.list.add(listString.substring(6));
                     if(!line.endsWith("*"))
                     {
                         b.chat_txt.append(line.substring(6)+"爬上了红蜘蛛网-"+'\n');
                     }
                 }
                 else if(line.startsWith("QUIT"))
                 {
                    String str=line.substring(10);
                    try
                    {
                        for(int i=0,k=0;i<=120;i++)
                        {
                            String s=b.b2.list.getItem(i);
                            if(s.equals(str))
                            {
                                k=i;
                                b.b2.list.remove(k);
                                b.chat_txt.append(line.substring(10)+"-高兴地离开了红蜘蛛网"+'\n');
                            }
                        }
                    }
                    catch(ArrayIndexOutOfBoundsException e){}
                 }
                 else if(line.startsWith("MSG"))
                 {
                     b.chat_txt.append(line.substring(3)+'\n');
                 }
                 else if(line.startsWith("悄悄地对"))
                 {
                     b.chat_txt.append(line+'\n');
                 }
             }
         }
         catch(IOException e)
         {
             say("再见!欢迎再来红蜘蛛聊天室,如果想重新进入本聊天室,单击浏览器的刷新选项");
         }
         catch(NullPointerException e){}
     }
     public void actionPerformed(ActionEvent e)
     {
         if(e.getSource()==a.button1)
         {
             name=new String(a.name_txt.getText());
             try
             {
                 for(int i=0;i<=120;i++)
                 {
                     if((a.name_txt.getText()!=null)&&((a.name_txt.getText()+
                             "["+xingbie+"]").equals(b.b2.list.getItem(i))||
                             a.name_txt.getText().equals("该名已被使用")))
                             {
                                jilu=1;
                                name=null;
                                break;
                             }
                 }
             }
             catch(ArrayIndexOutOfBoundsException e3){}
             if(jilu==0)
             {
                 try
                 {
                     out.writeUTF("PEOPLE"+a.name_txt.getText()+"["+xingbie+"]");
                     enter=1;
                 }
                 catch(IOException e1){}
             }
             else if(jilu==1)
             {
                 a.name_txt.setText("该名已被使用");
             }
             jilu=0;
         }
         else if(e.getSource()==a.button2)
         {
             try
             {
                out.writeUTF("QUIT");
                enter=0;
             }
             catch(IOException e1){}
             b.b2.list.removeAll();
         }
         else if(e.getSource()==c.button1&&enter==1)
         {
             if((name!=null))
             {
                 try
                 {
                     out.writeUTF("MSG"+name+"["+xingbie+"]"+"说-"+":"+
                     c.msg_txt.getText());
                     c.msg_txt.setText(null);
                 }
                 catch(IOException e1){}
             }
         }
         else if(e.getSource()==b.b2.list&&enter==1)
         {
             mywindow.setVisible(true);
             mywindow.text1.setText(((List)e.getSource()).getSelectedItem());
         }
         else if (e.getSource()==c.button2)
         {
             b.chat_txt.setText(null);
         }
         else if(e.getSource()==c.button3)
         {
             try
             {
                 b.b2.list.removeAll();
                 out.writeUTF("newlist");
             }
             catch(IOException e1){}
         }
     }
     public void itemStateChanged(ItemEvent e1)
     {
         if(e1.getItemSelectable()==a.box1)
         {
             xingbie=new String("男");
         }
         else if(e1.getItemSelectable()==a.box2)
         {
             xingbie=new String("女");
         }
         else if(e1.getItemSelectable()==a.box3)
         {
             xingbie=new String("蘑菇");
         }
     }
     public void say(String msg)
     {
         b.chat_txt.append("*****"+msg+"*****\n");
     }
 }

1个回答

lyyybz
lyyybz   Rxr 2016.08.19 10:52

请问你的问题解决了么,我碰到和你一样的问题!

Csdn user default icon
上传中...
上传图片
插入图片