📄 qq_server.java~199~
字号:
package jqq_server;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.*;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Timer;
import java.util.Date;
import java.sql.*;
import Seri.Customer;
import Seri.userList;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
//登录信息
/*class Customer implements Serializable
{
String custName;
String custPassword;
}*/
//注册信息
class Register_Customer implements Serializable
{
String custName;
String custPassword;
String sex;
String email;
}
//用于发送聊天和在线用户的信息
class Message implements Serializable
{
Vector userOnLine;
Vector chat;
}
public class qq_server extends JFrame implements Runnable{
JTextArea jtaMessageList = new JTextArea();
JLabel lMessage = new JLabel();
JTextArea jtaUserList = new JTextArea();
JLabel lUser = new JLabel();
JLabel lPort = new JLabel();
JTextField jtfPort = new JTextField();
JButton jbStart = new JButton();
JButton jbStop = new JButton();
JButton jbExit = new JButton();
Component component1 = Box.createHorizontalStrut(8);
ServerSocket server= null;
static Socket client = null;
static Vector u=new Vector(1,1);
static Vector v=new Vector(1,1);
Thread tStart;
Timer timer;
static int threadFlag=0;
public qq_server() {
try {
jbInit();
timer = new Timer();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
lMessage.setFont(new java.awt.Font("Dialog", Font.BOLD, 16));
lMessage.setText("消息列表");
lMessage.setBounds(new Rectangle(144, 9, 79, 21));
jtaMessageList.setToolTipText("");
jtaMessageList.setText("欢迎来到聊天室服务器"+"\n");
jtaMessageList.setBounds(new Rectangle(142, 45, 115, 228));
lUser.setFont(new java.awt.Font("Dialog", Font.BOLD, 16));
lUser.setText("用户列表");
lUser.setBounds(new Rectangle(20, 9, 79, 21));
jtaUserList.setText("");
jtaUserList.setBounds(new Rectangle(16, 45, 115, 228));
lPort.setFont(new java.awt.Font("Dialog", Font.BOLD, 16));
lPort.setText("端口设置");
lPort.setBounds(new Rectangle(277, 22, 79, 21));
jtfPort.setText("9000");
jtfPort.setBounds(new Rectangle(273, 66, 91, 23));
jbStart.setBounds(new Rectangle(273, 130, 100, 30));
jbStart.setText("启动服务器");
jbStart.addActionListener(new qq_server_jbStart_actionAdapter(this));
jbStop.setBounds(new Rectangle(273, 185, 100, 30));
jbStop.setMnemonic('0');
jbStop.setText("停止服务器");
jbStop.addActionListener(new qq_server_jbStop_actionAdapter(this));
jbStop.setEnabled(false);
jbExit.setBounds(new Rectangle(273, 240, 100, 30));
jbExit.setMnemonic('0');
jbExit.setText("关闭服务器");
jbExit.addActionListener(new qq_server_jbExit_actionAdapter(this));
component1.setBounds(new Rectangle(268, 112, 91, 1));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jbStop.addActionListener(new qq_server_jbStop_actionAdapter(this));
this.getContentPane().add(jtaUserList);
this.getContentPane().add(lUser);
this.getContentPane().add(jtaMessageList);
this.getContentPane().add(lMessage);
this.getContentPane().add(jtfPort);
this.getContentPane().add(jbStart);
this.getContentPane().add(jbExit);
this.getContentPane().add(lPort);
this.getContentPane().add(jbStop);
this.getContentPane().add(component1);
}
public static void main(String args[]) {
qq_server serv = new qq_server();
serv.setLocation(350,250);
serv.setSize(400,320);
serv.show();
}
public void jbStart_actionPerformed(ActionEvent e) {
try{
server=new ServerSocket(Integer .parseInt(jtfPort.getText()));
this.jtaMessageList.append("服务器启动....."+"\n");
//刷新计时器
timer.schedule(new TimerTask() {
// 执行的方法
public void run() {
// System.out.println(new Date().toString());
jtaUserList.setText("");
for(int i=0;i<u.size();i++)
{
jtaUserList.append((String)u.elementAt(i)+"\n");
}
}
}, 0, 1000);
tStart = new Thread(this);
tStart.start();
}
catch(Exception ex) {
System.out.println("can not listen to:"+e);
//出错,打印出错信息
}
this.jbStart.setEnabled(false);
this.jbStop.setEnabled(true);
}
public void run()
{
try
{
while(true)
{
//监听并接受客户的请求
client = server.accept();
Connection con = new Connection(client,u,v); //支持多线程
//login();
// Thread.sleep(50) ;
}
}
catch(Exception exx)
{
System.out.println("监听出错拉!"+exx);
}
}
public void jbStop_actionPerformed(ActionEvent e) {
try {
//threadFlag = 1;
tStart.stop();
// System.out.println("1111拉!");
server.close();
this.jtaMessageList.append("服务器停止!!"+"\n");
}
catch(Exception eStop)
{
System.out.println("停止出错拉!"+eStop);
}
timer.cancel();
this.jbStart.setEnabled(true);
}
public void jbExit_actionPerformed(ActionEvent e) {
try{
this.tStart.stop();
server.close();
this.dispose();
}
catch(Exception eExit)
{
System.out.println("退出出错拉!"+eExit);
}
timer.cancel();
}
}
class qq_server_jbStart_actionAdapter implements ActionListener {
private qq_server adaptee;
qq_server_jbStart_actionAdapter(qq_server adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jbStart_actionPerformed(e);
}
}
class qq_server_jbExit_actionAdapter implements ActionListener {
private qq_server adaptee;
qq_server_jbExit_actionAdapter(qq_server adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jbExit_actionPerformed(e);
}
}
class qq_server_jbStop_actionAdapter implements ActionListener {
private qq_server adaptee;
qq_server_jbStop_actionAdapter(qq_server adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jbStop_actionPerformed(e);
}
}
class Connection extends Thread
{
protected Socket netClient = null;
Vector userOnline;
Vector userChat;
protected ObjectInputStream fromClient; //从客户到服务器
// protected PrintStream toClient; //传到客户端
protected ObjectOutputStream toClient;
static Vector vList = new Vector();
Object obj;
public Connection(Socket client1,Vector u,Vector c)
{
// System.out.println("类建立!!");
netClient = client1;
userOnline=u;
userChat=c;
try
{
//发生双向通信
//检索客户输入client
fromClient = new ObjectInputStream(netClient.getInputStream());
//服务器写到客户
//toClient = new PrintStream(netClient.getOutputStream());
toClient = new ObjectOutputStream(netClient.getOutputStream());
}
catch(Exception e)
{
System.out.println("!!!!!!!"+e);
try
{
netClient.close();
}
catch(IOException e1)
{
System.out.println("不能建立流"+e1);
return;
}
}
this.start();
}
public void run()
{
try
{
//obj是Object类的对象
obj = (Object)fromClient.readObject();
if(obj.getClass().getName().equals("Seri.Customer"))
{
serverLogin();
}
if(obj.getClass().getName().equals("Seri.userList"))
{
//serverRegiste();
serverUserList();
}
if(obj.getClass().getName().equals("Message"))
{
//serverMessage();
}
if(obj.getClass().getName().equals("Chat"))
{
//serverChat();
}
if(obj.getClass().getName().equals("Exit1"))
{
//serverExit();
}
}
catch(IOException e)
{
System.out.println("IO错误!!"+e);
}
catch(ClassNotFoundException e1)
{
System.out.println("读对象发生错误!"+e1);
}
catch(Exception e2)
{
System.out.println("其他错误!"+e2);
}
/* finally
{
try
{
netClient.close();
}
catch(IOException e)
{
System.out.println(e);
}
}*/
//}
}
/**********登录处理**********/
public void serverLogin()
{
try
{
Seri.Customer clientMessage2 = (Seri.Customer)obj;
java.sql.Connection con;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:jqq","sa","");
String str = "select * from login where user_name = ? and user_pass = ?";
PreparedStatement ps = con.prepareStatement(str);
ps.setString(1,clientMessage2.custName);
ps.setString(2,clientMessage2.custPassword);
ResultSet rs = ps.executeQuery();
if(rs.next())
{
//toClient.println("登录成功");
toClient.writeObject("登录成功");
toClient.flush();
userOnline.add(clientMessage2.custName);
}
else
{
toClient.writeObject("登录失败");
toClient.flush();
}
rs.close();
con.close();
}
catch(Exception ee)
{
System.out.println("login::"+ee);
}
fromClient.close();
}
catch(Exception e)
{
System.out.println("login2::"+e);
}
}//登录处理完成
void serverUserList()
{
Seri.userList users = new userList();
users.vUserList = qq_server.u;
//java.sql.Connection con;
try
{
toClient.writeObject(users);
toClient.flush();
//toClient.close();
fromClient.close();
}
catch(Exception ee)
{
System.out.println("用户信息列表::"+ee);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -