📄 serverthread.java~150~
字号:
import java.io.*;
import java.util.*;
import java.net.*;
public class ServerThread extends Thread{
String _name;
String _key;
int counter;
DataOutputStream dos=null;
DataInputStream dis=null;
Socket socket=null;
Hashtable peopleList=null;
ChatUserDB chatUserDB=new ChatUserDB();
public ServerThread(Socket socket,Hashtable peopleList){
this.socket=socket;
this.peopleList=peopleList;
try{
dos=new DataOutputStream(socket.getOutputStream());
dis=new DataInputStream(socket.getInputStream());
}catch(IOException e){
e.printStackTrace();
}
}
public void run(){
String s="LOGIN_SUCCEED:";
/*while(true){
try{
for(int i=0;i<=20;i++){
dos.writeUTF("LOGIN_SUCCEED:");
//dos.writeUTF("LOGIN_PEOPLE:");
dos.writeUTF("LOGIN_PEOPLE:USER2");
//dos.writeInt(100);
dos.flush();
//dos.writeInt(100);
System.out.println(s);
Thread.sleep(1000);
}
}catch(Exception e){
try{
dos.flush();
dos.close();
dis.close();
}catch(Exception e1){
}
System.out.println("用户离开");
try{
socket.close();
}catch(Exception e1){
}
//e.printStackTrace();
}
}*/
while(true){
String _message = null;
try {
_message = dis.readUTF();
if(_message.startsWith("LOGIN_NAME:")){
//调用数据库函数,确认用户
//存线程
_name=_message.substring(_message.indexOf(":")+1,_message.indexOf("LOGIN_PD:"));
_key=_message.substring(_message.indexOf("LOGIN_PD:")+9);
if(chatUserDB.checkUser(_name,_key)){
peopleList.put(_name,this);
dos.writeUTF("LOGIN_SUCCEED:");
dos.writeUTF("LOGIN_PEOPLE:大家");
Enumeration _enum=peopleList.elements();
// while(true){
// dos.writeUTF("LOGIN_PEOPLE:WOMENDEGUSHI");
// }
while(_enum.hasMoreElements()){//发送名字
//while(true){
//System.out.println(((ServerThread)_enum.nextElement()).socket.getPort());
ServerThread serverThread=(ServerThread)_enum.nextElement();
serverThread.dos.writeUTF("LOGIN_PEOPLE:"+_name);
if(serverThread!=this){
dos.writeUTF("LOGIN_PEOPLE:"+serverThread._name);
}
}
dos.flush();
}else{
//System.out.println("eeee");
dos.writeUTF("LOGIN_ERROR");
}
}
else if(_message.startsWith("PRIVATE_MESSAGE:")){
String _toPeoples=_message.substring(_message.indexOf("#TOPEOPLE#")+10);
String _content=_message.substring(_message.indexOf("#MESSAGECONTENT#")+16,
_message.indexOf("#TOPEOPLE#"));
StringTokenizer fenxi=new StringTokenizer(_toPeoples,"$");
counter=fenxi.countTokens();
for(int i=0;i<counter;i++){
String _toPeople=fenxi.nextToken();
ServerThread serverThread=(ServerThread)peopleList.get(_toPeople);
if(serverThread!=null){
serverThread.dos.writeUTF("PRIVATE_MESSAGE:"+_name+"悄悄对您说:"+_content);
}else{
serverThread.dos.writeUTF("PEOPLE_LEAVE:"+_toPeople+"已经离开");
}
}
}
else if(_message.startsWith("PUBLIC_MESSAGE:")){
//转发消息
String _content=_message.substring(_message.indexOf("#MESSAGECONTENT#")+16);
Enumeration enum=peopleList.elements();
while(enum.hasMoreElements()){
ServerThread serverThread=(ServerThread)enum.nextElement();
if(serverThread!=this){
serverThread.dos.writeUTF("PUBLIC_MESSAGE:"+ _name + "对大家说:" + _content);
}
}
}
else if(_message.startsWith("SEND_FILE:")){
String _toPeople=_message.substring(_message.indexOf("#TOPEOPLE#")+10,_message.indexOf("#PORT#"));
String _toSendFile=_message.substring(_message.indexOf("SEND_FILE:")+10,_message.indexOf("#TOPEOPLE#"));
String _port=_message.substring(_message.indexOf("#PORT#")+6,_message.indexOf("#FILE_LENGTH#"));
String fileLength=_message.substring(_message.indexOf("#FILE_LENGTH#")+13);
ServerThread serverThread=(ServerThread)peopleList.get(_toPeople);
InetAddress ipAddress=this.socket.getInetAddress();
if(serverThread!=null){
serverThread.dos.writeUTF("SEND_FILE:"+_name+"#TOSENDFILE#"+_toSendFile+"#IPADDRESS#"+ipAddress+"#PORT#"+_port+"#FILE_LENGTH#"+fileLength);
// System.out.println("SEND_FILE:"+_name+"#TOSENDFILE#"+_toSendFile+"#IPADDRESS#"+ipAddress+"#PORT#"+_port+"#FILE_LENGTH#"+fileLength);
}else{
serverThread.dos.writeUTF("PEOPLE_LEAVE:"+_toPeople+"已经离开");
}
//File f=new File(_toSendFile);
//System.out.println(_toPeople+" "+f.getName()+" "+_port);
}
else if(_message.startsWith("CANCEL_SENDING:")){
String _fromPeople=_message.substring(_message.indexOf("CANCEL_SENDING:")+15,_message.indexOf("#TOPEOPLE#"));
String _content=_message.substring(_message.indexOf("#TOPEOPLE#")+10);
ServerThread serverThread=(ServerThread)peopleList.get(_fromPeople);
if(serverThread!=null){
serverThread.dos.writeUTF("CANCEL_SENDING:"+_content);
}
}
else if(_message.startsWith("AGREE_ACCEPT:")){
}
else if(_message.startsWith("DISAGREE_ACCEPT:")){
}
else if(_message.startsWith("PEOPLE_LEAVE:")){
}
}
catch (IOException ioe) {
Enumeration enum=peopleList.elements();
while(enum.hasMoreElements()){
try{
ServerThread serverThread=(ServerThread)enum.nextElement();
if(serverThread!=this&&serverThread.isAlive()){
serverThread.dos.writeUTF("PEOPLE_LEAVE:"+this._name);
}
}catch(Exception e){
}
}
try{
if (peopleList.containsKey(_name)) {
peopleList.remove(_name);
}
}catch(Exception e){
}
//System.out.println();
//ioe.printStackTrace();
try{
this.socket.close();
this.dos.flush();
this.dos.close();
this.dis.close();
break;
}catch(Exception e){
System.out.println("serverthread");
e.printStackTrace();
}
}
}
}
/* public static void main(String[] args) {
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -