package xs; /**************************************************************** * Version : 1.0 * Date : 02/03/2007 * * Description * This is a Server Side application of Chat System. * This application is used for receiving the messages from any client * and send to each and every client and in this we can maintain the * list of all online users. * * Remarks * This application is unable to provide the private chatting facility ******************************************************************/ import java.io.*; import java.net.*; import java.util.*; public class MyServer{ ServerSocket ss; Socket s; ArrayList al=new ArrayList(); ArrayList al1=new ArrayList(); ArrayList al2=new ArrayList(); ArrayList alname=new ArrayList(); Socket s1,s2; MyServer()throws IOException{ ss=new ServerSocket(1004); // create server socket while(true){ s=ss.accept(); //accept the client socket s1=ss.accept(); s2=ss.accept(); al.add(s); // add the client socket in arraylist al1.add(s1); al2.add(s2); System.out.println("Client is Connected"); MyThread2 m=new MyThread2(s2,al2,alname); //new thread for maintaning the list of user name Thread t2=new Thread(m); t2.start(); MyThread r=new MyThread(s,al);//new thread for receive and sending the messages Thread t=new Thread(r); t.start(); MyThread1 my=new MyThread1(s1,al1,s,s2); // new thread for update the list of user name Thread t1=new Thread(my); t1.start(); } } public static void main(String[] args){ try{ new MyServer(); }catch (IOException e){} } } //class is used to update the list of user name class MyThread1 implements Runnable{ Socket s1,s,s2; static ArrayList al1; DataInputStream ddin; String sname; MyThread1(Socket s1,ArrayList al1,Socket s,Socket s2){ this.s1=s1; this.al1=al1; this.s=s; this.s2=s2; } public void run(){ try{ ddin=new DataInputStream(s1.getInputStream()); while(true){ sname=ddin.readUTF(); System.out.println("Exit :"+sname); MyThread2.alname.remove(sname);//remove the logout user name from arraylist MyThread2.every(); al1.remove(s1); MyThread.al.remove(s); MyThread2.al2.remove(s2); if(al1.isEmpty()) System.exit(0); //all client has been logout } }catch(Exception ie){} } } // class is used to maintain the list of all online users class MyThread2 implements Runnable{ Socket s2; static ArrayList al2; static ArrayList alname; static DataInputStream din1; static DataOutputStream dout1; MyThread2(Socket s2,ArrayList al2,ArrayList alname){ this.s2=s2; this.al2=al2; this.alname=alname; } public void run(){ try{ din1= new DataInputStream(s2.getInputStream()); alname.add(din1.readUTF()); // store the user name in arraylist every(); }catch(Exception oe){System.out.println("Main expression"+oe);} } // send the list of user name to all client static void every()throws Exception{ Iterator i1=al2.iterator(); Socket st1; while(i1.hasNext()){ st1=(Socket)i1.next(); dout1=new DataOutputStream(st1.getOutputStream()); ObjectOutputStream obj=new ObjectOutputStream(dout1); obj.writeObject(alname); //write the list of users in stream of all clients dout1.flush(); obj.flush(); } } } //class is used to receive the message and send it to all clients class MyThread implements Runnable{ Socket s; static ArrayList al; DataInputStream din; DataOutputStream dout; MyThread(Socket s, ArrayList al){ this.s=s; this.al=al; } public void run(){ String str; int i=1; try{ din=new DataInputStream(s.getInputStream()); }catch(Exception e){} while(i==1){ try{ str=din.readUTF(); //read the message distribute(str); }catch (IOException e){} } } // send it to all clients public void distribute(String str)throws IOException{ Iterator i=al.iterator(); Socket st; while(i.hasNext()){ st=(Socket)i.next(); dout=new DataOutputStream(st.getOutputStream()); dout.writeUTF(str); dout.flush(); } } }
最近下载更多
794860639 LV1
2023年10月7日
caomin LV4
2023年5月19日
kk1226 LV2
2022年12月30日
106sadadwd LV2
2022年6月18日
Demo1111 LV30
2021年12月9日
胡萝北呀 LV3
2021年11月26日
顾北城 LV12
2021年11月21日
ComeDebug LV6
2021年9月6日
Count count count LV1
2021年7月9日
tyuthnw123 LV2
2021年6月22日
最近浏览更多
3263394665 LV9
8月31日
ethan_
5月29日
暂无贡献等级
微信网友_7004855557083136 LV1
5月22日
zeng1206 LV7
2023年12月28日
微信网友_6762641760833536
2023年12月4日
暂无贡献等级
794860639 LV1
2023年10月7日
KAIzx11 LV7
2023年6月25日
17683946472 LV9
2023年6月8日
caomin LV4
2023年5月19日
微信网友_6444139264921600 LV6
2023年4月29日