// ================================================ =; //Server code(I useJavaDeveloped by others); // Chatserver. Java // ================================================ =; Package com. klstudio. Socket. Chat; Import java. Io. ioexception; Import java.net. serversocket; Import java.net. Socket; Import java. util. vector; // Import com. klstudio. util. Logger; /** * @ Author kinglong * * To change the template of the type annotation generated by todo, go to window-preferences-Java-code style-code template. */ Public class chatserver { // Private logger; Private Static vector clients = new vector (); Private Static serversocket Server = NULL; Private Static Socket socket = NULL; Public static string commanddelimiters = "-@@##@@-"; Public static string peopledelimiters = "-@#@-"; Public chatserver (){ } Public static void policyroom (){ Stringbuffer people = new stringbuffer ("people" + commanddelimiters + "All people "); For (INT I = 0; I <clients. Size (); I ++ ){ Client client = (client) clients. elementat (I ); People. append (leledelimiters + client. getclientname ()); } Sendclients (people ); } Public staticboolean checkname (client newclient ){ For (INT I = 0; I <clients. Size (); I ++ ){ Client client = (client) clients. elementat (I ); If (client! = Newclient & client. getclientname (). Equals (newclient. getclientname ())){ Return false; } } Return true; } Public static void closeall (){ While (clients. Size ()> 0 ){ Client client = (client) clients. firstelement (); Try { Client. getclientsocket (). Close (); } Catch (ioexception e ){ // Todo automatically generates catch Blocks // Logger = new logger (system. Out ); // Logger. Log ("error-" + E. tostring ()); } Finally { Clients. removeelement (client ); } } } Public static synchronized void disconnect (Client client ){ Client. Send (New stringbuffer ("quit ")); Try { Client. getclientsocket (). Close (); } Catch (ioexception e ){ // Todo automatically generates catch Blocks // Logger = new logger (system. Out ); // Logger. Log ("error-" + E. tostring ()); } Finally { Clients. removeelement (client ); } } Public static synchronized void sendclients (stringbuffer SB ){ For (INT I = 0; I <clients. Size (); I ++ ){ Client client = (client) clients. elementat (I ); Client. Send (SB ); } } Public static synchronized void sendclients (stringbuffer Sb, string ownername, string toname ){ For (INT I = 0; I <clients. Size (); I ++ ){ Client client = (client) clients. elementat (I ); If (toname. Equals (client. getclientname () | toname. Equals ("All persons") | ownername. Equals (client. getclientname ())){ Client. Send (SB ); } } } Public static synchronized void sendclients (client ownerclient ){ For (INT I = 0; I <clients. Size (); I ++ ){ Client client = (client) clients. elementat (I ); If (client. getclientname (). Equals (ownerclient. getclientname ())){ Client. Send (New stringbuffer ("MSG" + commanddelimiters + "system information> welcome! ")); } Else { Client. Send (New stringbuffer ("MSG" + commanddelimiters + "system information> [" + ownerclient. getclientname () + "] the user enters! ")); } } } Public static void main (string [] ARGs ){ Int Port = 8888; If (ARGs. length> 0 ){ Port = integer. parseint (ARGs [0]); } // Logger = new logger (system. Out ); // Logger. Log ("info-chatserver [" + port + "] the service is starting ..."); Try { Server = new serversocket (port ); } Catch (ioexception e ){ // Todo automatically generates catch Blocks // Logger. Log ("error-" + E. tostring ()); } While (true ){ If (clients. Size () <5 ){ Try { Socket = server. Accept (); If (socket! = NULL ){ // Logger. Log ("information-" + socket. tostring () + "connection "); } } Catch (ioexception e ){ // Todo automatically generates catch Blocks // Logger. Log ("error-" + E. tostring ()); } Int I = 0; Do { Client client = new client (socket ); If (client. getclientname ()! = NULL ){ Clients. addelement (client ); If (checkname (client )){ // Logger. Log ("info-" + "currently [" + clients. Size () + "] connected users "); Sendclients (client ); Client. Start (); Policyroom (); } Else { Client. Send (New stringbuffer ("taken ")); Disconnect (client ); } I ++; } Break; } While (I <clients. Size ()); } Else { Try { Thread. Sleep (200 ); } Catch (interruptedexception e ){ // Todo automatically generates catch Blocks // Logger. Log ("error-" + E. tostring ()); } } } } } |