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

📄 qqserver.java

📁 模仿qq的聊天系统,java做的,能基本实现聊天同信功能
💻 JAVA
字号:
package com.hs ;

import java.io.* ;
import java.net.* ;
import java.awt.* ;
import javax.swing.* ;
import java.awt.event.* ;
import java.util.Hashtable ;

public class QQServer extends JFrame implements ActionListener {	
	
	static boolean bl = true ;//服务器开关
	Hashtable ht = new Hashtable() ;
			
	QQServer(String title) {
		this.setTitle(title) ;
		this.setSize(260 , 140) ;
		this.setResizable(false) ;
		
		ImageIcon ii = new ImageIcon("server.jpg") ;
		JLabel lii = new JLabel(ii) ;
		
		JButton b_start = new JButton("▲") ;
		JButton b_sleep = new JButton("〓") ;
		JButton b_stop = new JButton("■") ;
		
		b_start.addActionListener(this) ;
		b_sleep.addActionListener(this) ;
		b_stop.addActionListener(this) ;
		
		JLabel l_start = new JLabel("开始/继续") ;
		JLabel l_sleep = new JLabel("暂停") ;
		JLabel l_stop = new JLabel("停止") ;
		
		JPanel p_button = new JPanel(new GridLayout(3 , 2 , 10 , 5)) ;
		p_button.add(b_start) ;
		p_button.add(l_start) ;
		p_button.add(b_sleep) ;
		p_button.add(l_sleep) ;
		p_button.add(b_stop) ;
		p_button.add(l_stop) ;
		
		JPanel p_all = new JPanel(new FlowLayout()) ;
		p_all.add(lii) ;
		p_all.add(p_button) ;
		
		this.add(p_all) ;
		this.setVisible(true) ;
		
		this.star() ;
	}
	
	//服务器端的开始
	void star() {
		
		try {
			System.out.println ("************************************************") ;
			ServerSocket ss = new ServerSocket(8001) ;
				
			if(bl) {
				
				System.out.println ("服务器在8001端口监听...........") ;
				System.out.println ("************************************************") ;
				
				while(true) {	
					Socket s = ss.accept() ;
					
					MyServer ms = new MyServer() ;
					ms.setSocket(s) ;
					ms.setHashtable(ht) ;
					new Thread(ms).start() ;	
				}		
			}				
	    }
	    catch (Exception ex) {
	    	ex.printStackTrace() ;
	    }	
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("▲")) {
			bl = true ;
			System.out.println ("bl = " + bl) ;
		}
		
		if(e.getActionCommand().equals("■")) {
			bl = false ;
			System.out.println ("bl = " + bl) ;
		}
	}		
		
	public static void main(String[] args) {	
		JFrame.setDefaultLookAndFeelDecorated(true) ;
		QQServer q = new QQServer("QQ服务器") ;						
	}
}

//服务线程
class MyServer implements Runnable {
		
	MyNet mn = new MyNet() ;
	
	private Hashtable ht ;
	private Socket s ;
	
	void setHashtable(Hashtable ht) {
		this.ht = ht ;
	}
	void setSocket(Socket s) {
		this.s = s ;
	}
	
	public void run() {
		
		//接收客户端发来的用户名和密码并到服务器验证
		String uandp = mn.receive(s) ;
		
		String u = uandp.split("==hs==")[0] ;
		String p = uandp.split("==hs==")[1] ;
		
		//到数据库中验证
		MyDMO md = new MyDMO() ;
		System.out.println ("aaaaaaaa") ;
		if(md.validateUandP(u , p)) {
			//验证成功返回ok
			mn.send(s , "ok") ;	
			System.out.println (u + "上线了!") ;
			
			//扫描hash表,得到所有在线用户名,并发送给自己客户端
			mn.send(s , ht) ;
			
			//扫描hash表,得到所有在线用户的Socket,将自己的用户名发给他们
			mn.send(ht , "username==hs==" + u) ;
			
			//把自己添加到Hashtable 中
 			ht.put(u , s) ;
 				
			//接收客户端发送来的聊天信息
			while(true) {
				System.out.println ("+++++++++++++") ;
				String mess = mn.receive(s) ;
				
				//裁分发来的信息
				String op = mess.split("==hs==")[0] ;
				String ms = mess.split("==hs==")[1] ;

				if(op.equals("exit")) {
					ht.remove((Object)ms) ;
					mn.send(ht , "exit==hs==" + ms) ;
					break ;
				}
				
				if(op.equals("File")) {
					if(ms.equals("all")) {
						File fileName = new File("D:/聊天记录/临时文件.hs") ;
						FileSend fs = new FileSend() ;
						
						fs.fileReceive(s , fileName) ;
						
						mn.send(ht , "aFile==hs==asdf") ;
						fs.sendFile(ht , fileName) ;
					}else {
						File fileName = new File("D:/聊天记录/临时文件.hs") ;
						FileSend fs = new FileSend() ;
						
						fs.fileReceive(s , fileName) ;
						
						Socket so = (Socket)ht.get(ms) ;
						mn.send(so , "aFile==hs==asdf") ;
						fs.sendFile(so , fileName) ;
					}
					
				}
				
				if(op.equals("ALL")) {
					System.out.println (op) ;
					mn.send(ht , "say==hs==" + ms) ;
				}else {

					mn.send((Socket)ht.get(op) , "say==hs=="+ms) ;
				}
			}
			
		}else {
			//验证失败返回err
			mn.send(s , "err") ;
			System.out.println (u + "企图非法登陆服务器被赶滚蛋!") ;
		}		
  	}
}

⌨️ 快捷键说明

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