📄 qqserver.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 + -