📄 serverlistenthread.java
字号:
package com.gamvan.club.users.im.server;import database.command.JDBCOperation;import java.awt.Color;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.sql.Connection;import javax.swing.JComboBox;import javax.swing.JOptionPane;import com.gamvan.club.users.im.tools.MyTextPane;public class ServerListenThread extends Thread { /* * 此类用于侦听客户端的连接,响应客户端登陆的请求,并且为该用户启动专用的线程 * 处理与此用户相关的操作 */ ServerSocket server = null;//侦听套接字 ServerReceiveThread recevThread = null;//服务器接受线程 private MyTextPane chatMeg = null;//聊天信息框 private UserInfoList userInfoList = null;//用户信息列表 private SingleUserMegData clientData = null;//客户端的数据 private JComboBox userOnlineList = null; private Connection con = null; public boolean isStop; public ServerListenThread(){} public void run(){ if(!server.isClosed()){ startListen(); } } public void startListen(){//服务器侦听线程的执行体 while(!isStop&&!server.isClosed()){//如果套接字处于打开状态 try{ clientData = new SingleUserMegData(); //监听客户端的连接 clientData.socket = server.accept(); //得到套接字输出流 clientData.dataOut = new ObjectOutputStream( clientData.socket.getOutputStream()); //发送数据流头 clientData.dataOut.flush(); //得到套接字输入流 clientData.dataIn = new ObjectInputStream( clientData.socket.getInputStream()); //读取用户昵称 clientData.msg = (String)clientData.dataIn.readObject(); if(!clientData.msg.equals("login")&&!clientData.msg.equals("注册信息")){// clientData.userName=clientData.msg; userOnlineList.addItem(clientData.userName); chatMeg.append(Color.orange,"用户:" + clientData.userName + "上线…………" + "\n"); userInfoList.add(clientData); //创建服务器接收线程 recevThread = new ServerReceiveThread(); recevThread.sendObject(chatMeg,clientData, userInfoList,userOnlineList); recevThread.start(); }else if(clientData.msg.equals("login")){ //在这里调用数据库连接方法 String checkUserName = (String)clientData.dataIn.readObject(); String recevPassword = (String) clientData.dataIn.readObject(); //启动新线程,在数据库中检测用户名 JDBCThread jt = new JDBCThread(); jt.sendObject(clientData,checkUserName,recevPassword); jt.start(); }else if(clientData.msg.equalsIgnoreCase("注册信息")){ //System.out.println("1234567890"); //首先接受用户名和密码 String username=(String)clientData.dataIn.readObject(); String password=(String)clientData.dataIn.readObject(); //接受其他用户注册信息 String trueName=(String)clientData.dataIn.readObject(); String country=(String)clientData.dataIn.readObject(); String fav=(String)clientData.dataIn.readObject(); String tel=(String)clientData.dataIn.readObject(); //System.out.println(username+password+trueName+country+fav+tel); //将收到的内容填入数据库中 //获得到数据库的连接 con= JDBCOperation.connection("net.sourceforge.jtds.jdbc.Driver", "jdbc:jtds:sqlserver://127.0.0.1:1433/gamvantalk", "sa","123"); boolean isMember=JDBCOperation.search_Mem(username,con); if(!isMember){//检测用户ID是否已经被人注册 //调用插入数据的方法 String result=JDBCOperation.insertValue("member",username,password, trueName,country,fav,tel,con); if(result.equalsIgnoreCase("success")){ clientData.dataOut.writeObject("注册成功"); clientData.dataOut.flush(); con.close(); }else{ clientData.dataOut.writeObject("注册失败"); clientData.dataOut.flush(); con.close(); } }else{ clientData.dataOut.writeObject("注册失败"); clientData.dataOut.flush(); con.close(); } } if(server.isClosed()){ recevThread.isStop = true; } }catch(Exception e){ JOptionPane.showMessageDialog(null,"您已经关闭了侦听套接字!!", "系统警告",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } } public void sendObject(ServerSocket server, MyTextPane chatMeg, UserInfoList userInfoList, JComboBox userOnlineList){ this.server = server; this.chatMeg = chatMeg; this.userInfoList = userInfoList; this.userOnlineList = userOnlineList; isStop = false; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -