⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatserver.java

📁 一个Java编写的聊天室小程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer
{
 private static ServerSocket ssocket;
 private static int port;
 private static int cport=4000;
 private static String serverQuit="No";

 Hashtable hst=new Hashtable();
 JPanel jpanel=new JPanel(new FlowLayout());
 JTextArea jtextarea=new JTextArea(16,28);
 JScrollPane jscrollpane=new JScrollPane(jtextarea);
 JButton jbutton=new JButton("Quit");
 JFrame jframe=new JFrame("Chat Server");
  
 public static void main(String args[]) throws Exception
 {
    int defaultport=1234;
    if(args.length==0)
     {
       port=defaultport;
     }
     else
     {
       port=Integer.parseInt(args[0]);
     }
     new ChatServer();
     }

 public ChatServer() throws Exception
    {
      jtextarea.setEditable(false);
      jtextarea.setText("Server start at ");
      jpanel.add(jscrollpane);
      jpanel.add(jbutton);
      jframe.getContentPane().add(jpanel);
      jframe.setSize(320,367);
      jframe.show();

      jbutton.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e)
        {
         System.exit(0);
        }
       });

       jframe.addWindowListener(new WindowAdapter()
        {
         public void windowClosing(WindowEvent e)
          {
            serverQuit="Quit";
            System.exit(0);
          }
         });
 
        try
         {
          ssocket=new ServerSocket(port);
          String message=jtextarea.getText();
          jtextarea.setText(message+ssocket.getInetAddress().getLocalHost()+":"+ssocket.getLocalPort()+"\n");
          
          while(true)
          {
            Socket csocket=ssocket.accept();
               BufferedReader brin=new BufferedReader(new InputStreamReader(csocket.getInputStream()));
             String na=brin.readLine();
             String name=na.substring(5);
             System.out.println(name);
             message=jtextarea.getText();
           jtextarea.setText(message+"Connection from "+name+"\nHis TCP port is "+port+"\n"+"\n");
             DataOutputStream dos=new DataOutputStream(csocket.getOutputStream());
             dos.writeBytes("WELCOME"+' '+cport+'\n');
             dos.flush();
             hst.put(csocket,dos);
           Thread thread=new Thread(new Jabber(csocket, name, cport, dos, hst, serverQuit));
           thread.start();
           cport++;
           }
          }
           catch (IOException e){}
          }
         }

         class Jabber extends Thread implements Runnable
         {
           private Socket csocket;
           private Hashtable hst;
           int port;
           String name;
           String message;
           String serverquit;
           DataOutputStream dos;

           public Jabber(Socket socket, String names, int cport, DataOutputStream ds, Hashtable ht, String serverQuit)
           {
             csocket=socket;
             name=names;
             port=cport;
             dos=ds;
             hst=ht;
             serverquit=serverQuit;
            }

           public void run()
           {
            DataInputStream dis;
            int maxpacketsize=65507;
            byte[] buffer=new byte[maxpacketsize];
             try
            {
             DatagramSocket server=new DatagramSocket(port);
              while(true)
             {
              DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
               try
           {
             server.receive(packet);
             message=new String(packet.getData(),0,packet.getLength());
             packet.setLength(maxpacketsize);
          
             synchronized(hst)
             {

               for(Enumeration e=hst.elements(); e.hasMoreElements();)
               {
                 dos=(DataOutputStream)e.nextElement();
                 try
               { 
                   dos.writeBytes(message+'\n');
                }
               catch (IOException x){}
                }
               }
              }
              catch (IOException ex){}
              }
             }
              catch(SocketException exc){}

             finally
               {
                 synchronized(hst)
                  {
                   hst.remove(csocket);
                   try
                   {
                     csocket.close();
                   }
                    catch (IOException x){System.out.println(x);}
                   }
                 }
                }
               }







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -