根据课本改变的多线程聊天小程序

来源:互联网 发布:软件质量问题处理流程 编辑:程序博客网 时间:2024/05/01 16:06

控制台 编译客户端 再编译用户端(两个)

//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class QZL1201 extends JFrame implements Runnable
{
 private ObjectInputStream m_input;
 private ObjectOutputStream m_output;
 private JTextField m_enter;
 private JTextArea m_display;
 private int m_clientNumber=0;
 public Thread t1,t2,t3;
 public QZL1201()
 {
  super("简单聊天小程序 服务端");
  Container c=getContentPane();
  m_enter=new JTextField();
  m_enter.setEnabled(true);
  m_enter.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent event)
   {
    try
    {
     String s=event.getActionCommand();
        m_output.writeObject(s);
        m_output.flush();
        mb_displayAppend("服务器端:"+s);
        m_enter.setText("");
    }
    catch (Exception e)
    {
     System.err.println("发生异常:"+e);
     e.printStackTrace();
    }
   }
  });
  c.add(m_enter,BorderLayout.NORTH);
  m_display=new JTextArea();
  c.add(new JScrollPane(m_display),BorderLayout.CENTER);
  t1=new Thread(this);
  t1.start();
  t2=new Thread(this);
  t2.start();
  
 }
 public void mb_displayAppend(String s)
 {
  m_display.append(s+"/n");
  m_display.setCaretPosition(m_display.getText().length());
  m_enter.requestFocusInWindow();
 }
 public boolean mb_isEndSession(String m)
 {
  if(m.equalsIgnoreCase("q"))
      return(true);
  if(m.equalsIgnoreCase("quit"))
   return(true);
  if(m.equalsIgnoreCase("exit"))
   return(true);
  if(m.equalsIgnoreCase("end"))
   return(true);
  if(m.equalsIgnoreCase("结束"))
   return(true);
  return(false);
 }
 public void run()
 {
  if(Thread.currentThread()==t1)
  {
   try
     {
    //System.out.println("sdfsadfasdfasd");
   ServerSocket server=new ServerSocket(5000);
   String m;
   while(true)
   {
    m_clientNumber++;
    mb_displayAppend("等待连接["+m_clientNumber+"]");
    Socket s=server.accept();
    mb_displayAppend("接收到客户端连接["+m_clientNumber+"]");
    m_output=new ObjectOutputStream(s.getOutputStream());
    m_input=new ObjectInputStream(s.getInputStream());
    m_output.writeObject("连接成功");
    m_output.flush();
    m_enter.setEnabled(true);
    do
    {
     m=(String) m_input.readObject();
     mb_displayAppend("客户端:"+m);

    }
    while (!mb_isEndSession(m));
    //m_output.writeObject("q");
    //m_output.flush();
    //m_enter.setEnabled(false);
    //m_output.close();
    //m_input.close();
    //s.close();
    mb_displayAppend("连接["+m_clientNumber+"]结束");

   }
      }
      catch (Exception e)
      {
       System.err.println("发生异常"+e);
       e.printStackTrace();
       mb_displayAppend("连接["+m_clientNumber+"]发生异常");
       }

  }
  if(Thread.currentThread()==t2)
  {
   try
     {
    //System.out.println("sdfsadfasdfasd");
   ServerSocket server=new ServerSocket(5001);
   String m;
   while(true)
   {
    m_clientNumber++;
    mb_displayAppend("等待连接["+m_clientNumber+"]");
    Socket s=server.accept();
    mb_displayAppend("接收到客户端连接["+m_clientNumber+"]");
    m_output=new ObjectOutputStream(s.getOutputStream());
    m_input=new ObjectInputStream(s.getInputStream());
    m_output.writeObject("连接成功");
    m_output.flush();
    m_enter.setEnabled(true);
    do
    {
     m=(String) m_input.readObject();
     mb_displayAppend("客户端:"+m);

    }
    while (!mb_isEndSession(m));
    m_output.writeObject("q");
    m_output.flush();
    m_enter.setEnabled(false);
    m_output.close();
    m_input.close();
    s.close();
    mb_displayAppend("连接["+m_clientNumber+"]结束");

   }
      }
      catch (Exception e)
      {
       System.err.println("发生异常"+e);
       e.printStackTrace();
       mb_displayAppend("连接["+m_clientNumber+"]发生异常");
       }

  }
  
                      
 }
 public static void main(String args[])
 {
  QZL1201 app=new QZL1201();
  app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     app.setSize(350,150);
  app.setVisible(true);
  
 }
}

//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
class QZL1201client1 extends JFrame
{
 private ObjectInputStream m_input;
 private ObjectOutputStream m_output;
 private JTextField m_enter;
 private JTextArea m_display;
 public QZL1201client1()
 {
  super("简单聊天小程序 客户端1");
  Container c=getContentPane();
  m_enter=new JTextField();
  m_enter.setEnabled(false);
  m_enter.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent event)
   {
    try
    {
     String s=event.getActionCommand();
        m_output.writeObject(s);
        m_output.flush();
        mb_displayAppend("客户端:"+s);
        m_enter.setText("");
    }
    catch (Exception e)
    {
     System.err.println("发生异常:"+e);
     e.printStackTrace();
    }
   }
  });
  c.add(m_enter,BorderLayout.NORTH);
  m_display=new JTextArea();
  c.add(new JScrollPane(m_display),BorderLayout.CENTER);
 }
 public void mb_displayAppend(String s)
 {
  m_display.append(s+"/n");
  m_display.setCaretPosition(m_display.getText().length());
  m_enter.requestFocusInWindow();
 }
 /*public boolean mb_isEndSession(String m)
 {
  if(m.equalsIgnoreCase("q"))
      return(true);
  if(m.equalsIgnoreCase("quit"))
   return(true);
  if(m.equalsIgnoreCase("exit"))
   return(true);
  if(m.equalsIgnoreCase("end"))
   return(true);
  if(m.equalsIgnoreCase("结束"))
   return(true);
  return(false);
 }*/
 public void mb_run(String host,int port)
 {
  
   try
     {
    
   mb_displayAppend("尝试连接");
   Socket s=new Socket(host,port);
   String m;
   m_output=new ObjectOutputStream(s.getOutputStream());
   m_input=new ObjectInputStream(s.getInputStream());
   m_enter.setEnabled(true);
   //m_output.writeObject("q");
   //m_output.flush();
   //m_enter.setEnabled(false);
   //m_output.close();
   //m_input.close();
   //s.close();
   //System.exit(0);
   do
   {
       m=(String) m_input.readObject();
    mb_displayAppend("服务器端:"+m);

   }
   while (true);
     }
      catch (Exception e)
      {
       System.err.println("发生异常"+e);
       e.printStackTrace();
       mb_displayAppend("发生异常");
       }

  
  
  
                      
 }
 public static void main(String[] args)
 {
  QZL1201client1 app=new QZL1201client1();
  app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  app.setSize(350,150);
  app.setVisible(true);
  if(args.length==0)
  {
   app.mb_run("localhost",5000);
  }else app.mb_run(args[0],5000);
  
 }
}
//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
class QZL1201client2 extends JFrame
{
 private ObjectInputStream m_input;
 private ObjectOutputStream m_output;
 private JTextField m_enter;
 private JTextArea m_display;
 public QZL1201client2()
 {
  super("简单聊天小程序 客户端2");
  Container c=getContentPane();
  m_enter=new JTextField();
  m_enter.setEnabled(false);
  m_enter.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent event)
   {
    try
    {
     String s=event.getActionCommand();
        m_output.writeObject(s);
        m_output.flush();
        mb_displayAppend("客户端:"+s);
        m_enter.setText("");
    }
    catch (Exception e)
    {
     System.err.println("发生异常:"+e);
     e.printStackTrace();
    }
   }
  });
  c.add(m_enter,BorderLayout.NORTH);
  m_display=new JTextArea();
  c.add(new JScrollPane(m_display),BorderLayout.CENTER);
 }
 public void mb_displayAppend(String s)
 {
  m_display.append(s+"/n");
  m_display.setCaretPosition(m_display.getText().length());
  m_enter.requestFocusInWindow();
 }
 /*public boolean mb_isEndSession(String m)
 {
  if(m.equalsIgnoreCase("q"))
      return(true);
  if(m.equalsIgnoreCase("quit"))
   return(true);
  if(m.equalsIgnoreCase("exit"))
   return(true);
  if(m.equalsIgnoreCase("end"))
   return(true);
  if(m.equalsIgnoreCase("结束"))
   return(true);
  return(false);
 }*/
 public void mb_run(String host,int port)
 {
  
   try
     {
    
   mb_displayAppend("尝试连接");
   Socket s=new Socket(host,port);
   String m;
   m_output=new ObjectOutputStream(s.getOutputStream());
   m_input=new ObjectInputStream(s.getInputStream());
   m_enter.setEnabled(true);
   //m_output.writeObject("q");
   //m_output.flush();
   //m_enter.setEnabled(false);
   //m_output.close();
   //m_input.close();
   //s.close();
   //System.exit(0);
   do
   {
       m=(String) m_input.readObject();
    mb_displayAppend("服务器端:"+m);

   }
   while (true);
     }
      catch (Exception e)
      {
       System.err.println("发生异常"+e);
       e.printStackTrace();
       mb_displayAppend("发生异常");
       }

  
  
  
                      
 }
 public static void main(String[] args)
 {
  QZL1201client2 app=new QZL1201client2();
  app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  app.setSize(350,150);
  app.setVisible(true);
  if(args.length==0)
  {
   app.mb_run("localhost",5001);
  }else app.mb_run(args[0],5001);
  
 }
}

原创粉丝点击