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

界面编程

开发平台:

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. import java.net.Socket;
  16. public class ChatServer extends JFrame
  17. {
  18.   private JTextField inputBox;
  19.   private JTextArea outFrame;
  20.   private ObjectOutputStream outputS;
  21.   private ObjectInputStream inputS;
  22.   private ServerSocket toserver;
  23.   private Socket connection;
  24.   private int counter=1;
  25.   public ChatServer()
  26.   {
  27.     super("Server");
  28.     Container container = getContentPane();
  29.     inputBox = new JTextField();
  30.     inputBox.setEnabled(false);  //输入禁用
  31.     inputBox.addActionListener(new ActionListener(){//监听
  32.       public void actionPerformed(ActionEvent event)//发送消息
  33.       {sendMsg(event.getActionCommand());}
  34.     }
  35.       );
  36.       container.add(inputBox,BorderLayout.SOUTH);
  37.       outFrame = new JTextArea();//输出框
  38.       container.add(new JScrollPane(outFrame),BorderLayout.CENTER);
  39.       setSize(280,160);
  40.       setVisible(true);
  41.   }
  42.   public void connectServer()//处理连接
  43.   {
  44.     try
  45.     {
  46.       toserver = new ServerSocket(4000,100);
  47.       while(true)
  48.       {
  49.         wait4Connection();//等待连接
  50.         getStreams();//获取输入输出流
  51.         processConnection();//处理连接
  52.         closeConnection();//关闭连接
  53.         ++counter;
  54.       }
  55.     }
  56.     catch(EOFException eofException)
  57.     {//捕获异常
  58.       System.out.println("客户端连接错位!");
  59.     }
  60.     catch(IOException ioException)
  61.     {
  62.       ioException.printStackTrace();
  63.     }
  64.   }
  65.   private void wait4Connection() throws IOException
  66.   {
  67.     outFrame.setText("等待连接~~~n");
  68.     connection = toserver.accept();//侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
  69.     outFrame.append("连接"+counter+"来自:"+connection.getInetAddress().getHostName());
  70.   }
  71.   private void getStreams() throws IOException
  72.   {
  73.     outputS = new ObjectOutputStream(//设置输出流
  74.         connection.getOutputStream()
  75.         );
  76.     outputS.flush(); //刷新该流的缓冲。
  77.     inputS = new ObjectInputStream(//设置输入流
  78.         connection.getInputStream()
  79.         );
  80.     outFrame.append("nGet I/O streamsn");
  81.   }
  82.   private void processConnection() throws IOException
  83.   {//处理客户端连接,连接成功
  84.     String message = "服务器端>>连接成功!";
  85.     outputS.writeObject(message);//将指定的对象写入 ObjectOutputStream
  86.     outputS.flush();
  87.     inputBox.setEnabled(true);
  88.     do{//处理来自客户端的信息
  89.       try{
  90.         message = (String)inputS.readObject();//读取消息
  91.         outFrame.append("n"+message);
  92.         outFrame.setCaretPosition(outFrame.getText().length());
  93.       }
  94.       catch(ClassNotFoundException classNotFoundException)
  95.       {
  96.         outFrame.append("接收到未知类型的信息!");
  97.       }
  98.     }while(!message.equals("客户端>>TERMINATE"));
  99.   }
  100.   private void closeConnection() throws IOException  //关闭socket
  101.   {
  102.     outFrame.append("n用户 terminated 连接!");
  103.     inputBox.setEnabled(false);
  104.     outputS.close();
  105.     inputS.close();
  106.     connection.close();
  107.   }
  108.   private void sendMsg(String message)
  109.   {
  110.     try{
  111.       outputS.writeObject("服务器端>>"+message);
  112.       outputS.flush();
  113.       outFrame.append("n服务器端>>"+message);
  114.     }
  115.     catch(IOException ioException)
  116.     {
  117.       outFrame.append("n写信息发生错误!");
  118.     }
  119.   }
  120.   public static void main(String args[])
  121.   {
  122.     ChatServer process = new ChatServer();
  123.     process.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  124.     process.connectServer();
  125.   }
  126. }