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

📄 server.java

📁 此聊天程序是模仿QQ聊天制作
💻 JAVA
字号:
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/*服务器端主要实现了创建服务器界面,接受客户端数据并转发给其他客户端功能;
  功能有将客户端数据记录并显示在服务器界面上,并保存到一个jilu.txt文件中;
  还添加了读取服聊天记录jilu.txt文件并显示到另一窗体上的功能;
  还有清空聊天记录功能,聊天记录文件jilu.txt也将清空;
  退出服务器功能;
  */
public class Server
{
   public static Client user[]=new Client[20]; //存放所有通信线程
   public static int sum=0; //连接客户总数
   public static String message;
   public static void main(String args[])throws Exception 
   {
    try 
    {
    	 new Fuwuqi();//进入服务器界面
       ServerSocket s = new ServerSocket(5432);//指定端口
       while (true)
       { 
          Socket s1=s.accept(); //等待客户连接,若成功则返回一个socket对象
          DataOutputStream dos = new DataOutputStream(s1.getOutputStream());//取得socket输出流
          DataInputStream din = new DataInputStream(s1.getInputStream());//取出socket输入流
          user[sum]=new Client(sum,dos,din); //创建与客户对应的通信线程
          new Thread(user[sum]).start();//启动发送数据到客户端线程
          sum++;
      }
    } catch (IOException e) { }
   }
} 
//通信线程处理与对应客户的数据通信,将来自客户数据发往其他客户
class Client implements Runnable 
{
   int id; //客户标识
   DataOutputStream dos; //去往客户的输出流
   DataInputStream din; //来自客户的输入流
   public Client(int id,DataOutputStream dos, DataInputStream din) 
   {
      this.id=id;
      this.dos=dos;
      this.din=din;
   }
   public void run() 
   { //循环读取客户数据转发给其他客户
     while(true) 
     {
       try
       {
            Server.message=din.readUTF(); //读客户数据,无数据时线程将挂起
            Fuwuqi.xianshi.append(Server.message+"\n"); //将消息添加到服务器文本域显示       
          	int m=Server.sum;
            for (int i=0;i<m;i++)  //转发给其他所有客户
            { 
              Server.user[i].dos.writeUTF(Server.message);
            }
        }
       catch(IOException e) {}
     }
  }
}

//服务器界面
class Fuwuqi extends JFrame implements ActionListener
{
	public static TextArea xianshi; //消息文本框
	public static JLabel lab;
	public Fuwuqi()
	{
		super("记录客户端发送的消息");
		MenuBar m = new MenuBar();
    setMenuBar(m);
    Menu m1 = new Menu("消息");
    Menu m4 = new Menu("聊天记录"); 
    m.add(m1);
    m.add(m4);
    MenuItem m5 = new MenuItem("显示记录"); 
    MenuItem m6 = new MenuItem("保存记录");
    MenuItem m2 = new MenuItem("清空消息");
    MenuItem m3 = new MenuItem("退出");
  
    m1.add(m2);
    m4.add(m6);
    m4.addSeparator();
    m4.add(m5);
    m1.addSeparator();
    m1.add(m3);
    m2.addActionListener(this);//注册控件监听事件
    m3.addActionListener(this);
    m5.addActionListener(this);
    m6.addActionListener(this);
		xianshi = new TextArea(15,40);		
		this.add(xianshi);
    this.add("Center",xianshi);
		setSize(400,400);
		setVisible(true);
//窗体关闭事件
		addWindowListener(new WindowAdapter()
     {
				public void windowClosing(WindowEvent e)
		     {
			   if(JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(Fuwuqi.this,"真的要退出吗?",
   	     "结束程序",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE))
           {
         	    Window w=e.getWindow(); 
              w.dispose();
              System.exit(0);
           }
           
	    	 }
			});
	}
	public  void actionPerformed(ActionEvent e)
	{
		 String comp=e.getActionCommand();
		   if(comp.equals("清空消息"))
				{
					xianshi.replaceRange("",0,160);//清空文本域的内容
				}
				else if(comp.equals("退出"))
				{
					dispose();  //关闭窗体,并退出服务器程序
					System.exit(0);
				}
//文件操作主要用到了FileWriter和FileReader类
				else if(comp.equals("保存记录"))
				{
					try
					{
						String s = Fuwuqi.xianshi.getText();//获取服务器数据
						FileWriter out = new FileWriter("jilu.txt");//创建文件
				   	out.write(s);//将数据写入文件
				   	out.write("\n");
				   	out.close();
				  }catch(IOException q){}
				}
				else if(comp.equals("显示记录"))
				{
					new Jilu();//进入聊天记录界面
					
				}
	} 
}

//显示聊天记录界面
class Jilu extends JFrame
{
	public Label l;
	public TextArea t;
	public  Jilu()
	{
		super("显示聊天记录");
		l = new Label("聊天记录");
		t = new TextArea(10,30);
		this.add("North",l);
		this.add("Center",t);
		setSize(300,300);
		setVisible(true);
		char [] buf = new char[1024];
		try
		{
			FileReader in = new FileReader ("jilu.txt");//读取文件界面
		  int len = in.read(buf);
		  t.append(new String(buf,0,len)+"\n");//将文件内容显示到文本框
		  in.close();
		}catch(IOException x){}
		
		
	} 
}



⌨️ 快捷键说明

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