ChatClient.java
上传用户:dst675
上传日期:2022-07-17
资源大小:25k
文件大小:3k
源码类别:

界面编程

开发平台:

Java

  1. package room;
  2. /**
  3.  * <p>Title: </p>
  4.  * <p>Description: </p>
  5.  * <p>Copyright: Copyright (c) 2010</p>
  6.  * <p>Company: </p>
  7.  * @author not attributable
  8.  * @version 1.0
  9.  */
  10. import java.io.*;
  11. import java.net.*;
  12. import java.awt.*;
  13. import java.awt.event.*;
  14. import javax.swing.*;
  15. public class ChatClient extends JFrame{
  16.   private JTextField inputBox;
  17.   private JTextArea outFrame;
  18.   private ObjectOutputStream outputS;
  19.   private ObjectInputStream inputS;
  20.   private String message = "";
  21.   private String chatServer;
  22.   private Socket toclient;
  23.   public ChatClient(String srvhost) //初始化聊天服务
  24.   {
  25.     super("Client");
  26.     chatServer = srvhost;
  27.     //设置客户端连接的服务器
  28.     Container container = getContentPane();
  29.     inputBox = new JTextField();
  30.     //建立输入框
  31.     inputBox.setEnabled(false);
  32.     inputBox.addActionListener(new ActionListener(){//监听
  33.       public void actionPerformed(ActionEvent event)//发送消息给服务器
  34.       {sendMsg(event.getActionCommand());}
  35.      }
  36.     );
  37.     container.add(inputBox,BorderLayout.SOUTH);
  38.     outFrame = new JTextArea();//输出框
  39.     container.add(new JScrollPane(outFrame),BorderLayout.CENTER);
  40.     setSize(280,160);
  41.     setVisible(true);
  42.   }
  43.   public void connectClient()
  44.   {//连接服务器
  45.     try
  46.       {
  47.         connect2Server();//创建用于连接的Socket
  48.         getStreams();//获取输入输出流
  49.         processConnection();//处理连接
  50.         closeConnection();//关闭连接
  51.       }
  52.       catch(EOFException eofException)
  53.       {
  54.         System.out.println("Server terminated connection!");
  55.       }
  56.       catch(IOException ioException)
  57.       {
  58.         ioException.printStackTrace();
  59.       }
  60.   }
  61.   private void getStreams() throws IOException
  62.   {
  63.     outputS = new ObjectOutputStream(//设置输出流
  64.        toclient.getOutputStream());
  65.    outputS.flush(); //刷新该流的缓冲。
  66.    inputS = new ObjectInputStream(toclient.getInputStream());
  67.    outFrame.append("nGet I/O streamsn");
  68.   }
  69.   private void connect2Server() throws IOException
  70.   {
  71.     outFrame.setText("连接中~~~n");
  72.     toclient = new Socket(InetAddress.getByName(chatServer),4000);
  73.     outFrame.append("连接到:"+toclient.getInetAddress().getHostName());
  74.   }
  75.   private void processConnection() throws IOException
  76.   {
  77.     inputBox.setEnabled(true);
  78.     do
  79.     {
  80.       try{//读入信息并输出
  81.         message=(String)inputS.readObject();
  82.         outFrame.append("n"+message);
  83.         outFrame.setCaretPosition(outFrame.getText().length());
  84.       }
  85.       catch(ClassNotFoundException classNotFoundException)
  86.       {
  87.         outFrame.append("接收到未知类型的信息!");
  88.       }
  89.     }while(!message.equals("客户端>>TERMINATE"));
  90.   }
  91.   private void closeConnection() throws IOException
  92.   {
  93.     outFrame.append("n关闭连接!");
  94.     outputS.close();
  95.     inputS.close();
  96.     toclient.close();
  97.   }
  98.   private void sendMsg(String message)
  99.   {
  100.     try{
  101.       outputS.writeObject("客户端>>"+message);
  102.       outputS.flush();
  103.       outFrame.append("n客户端>>"+message);
  104.     }
  105.     catch(IOException ioException)
  106.     {
  107.       outFrame.append("n写信息发生错误!");
  108.     }
  109.   }
  110.   public static void main(String args[])
  111.   {
  112.     ChatClient beginning;
  113.     if(args.length==0)
  114.       beginning = new ChatClient("10.0.1.112");
  115.     else
  116.         beginning= new ChatClient(args[0]);
  117.     beginning.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  118.     beginning.connectClient();
  119.   }
  120. }