Java網路聊天伺服器端

來源:互聯網
上載者:User

//Java網路聊天伺服器<br />import java.io.*;<br />import java.awt.*;<br />import java.net.*;<br />import java.util.*;<br />import java.awt.event.*;<br />public class ServerFrame extends Frame implements ActionListener{<br /> int ScreenWidth,ScreenHeight;<br /> Button CloseServer;<br /> TextArea ServerStatus;<br /> ServerThread sThread;<br /> public ServerFrame(){<br /> super("遊戲伺服器");<br /> ServerStatus = new TextArea();<br /> CloseServer = new Button("關閉伺服器");<br /> ServerStatus.setEditable(false);<br /> CloseServer.addActionListener(this);<br /> add(ServerStatus,BorderLayout.CENTER);<br /> add(CloseServer,BorderLayout.SOUTH);<br /> ScreenWidth = getToolkit().getScreenSize().width;<br /> ScreenHeight = getToolkit().getScreenSize().height;<br /> setSize(ScreenWidth/2,ScreenHeight /2);<br /> setLocation((ScreenWidth - getWidth())/2,<br /> (ScreenHeight - getHeight())/2);<br /> setResizable(false);<br /> setVisible(true);<br /> sThread = new ServerThread(this);<br /> sThread.start();<br /> }<br /> public static void main(String[] args){<br /> new ServerFrame();<br /> }<br /> public void actionPerformed(ActionEvent e){<br /> dispose();<br /> System.exit(0);<br /> }<br />}<br />class ServerThread extends Thread{<br /> int sPort;<br /> ServerSocket sSocket;<br /> ServerFrame frame;<br /> TextArea sStatus;<br /> Vector Clients;<br /> Vector messages;<br /> BroadCast BroadCastWriter;<br /> CleanDeadConnect Cleaner;<br /> public ServerThread(ServerFrame f){<br /> Clients = new Vector();<br /> messages = new Vector();<br /> try{<br /> sPort = 6633;<br /> sSocket = new ServerSocket(sPort);<br /> }catch(IOException E){<br /> System.out.println("發生異常: "+E);<br /> System.out.println("無法建立伺服器介面!!");<br /> System.exit(1);<br /> }<br /> this.frame = f;<br /> sStatus = frame.ServerStatus;<br /> sStatus.append("遊戲伺服器已啟動../n/n");<br /> sStatus.append(">>>>>等待聯機<<<<</n/n");<br /> BroadCastWriter = new BroadCast(this);<br /> BroadCastWriter.start();<br /> Cleaner = new CleanDeadConnect(this);<br /> Cleaner.start();<br /> }<br /> public void run(){<br /> while(true){<br /> try{<br /> Socket cSocket = sSocket.accept();<br /> ClientThread cThread = new ClientThread(cSocket,this);<br /> cThread.start();<br /> sStatus.append(cThread.getClientName() + ":");<br /> sStatus.append(cThread.getClientAddress() + "已聯機");<br /> sStatus.append("目前聯機數" + ClientThread.ConnectNumber +"/n");<br /> synchronized(Clients){<br /> Clients.addElement(cThread);<br /> }<br /> }catch(IOException E){<br /> System.out.println("發生異常:" + E);<br /> System.out.println("建立用戶端聯機失敗!");<br /> System.exit(2);<br /> }<br /> }<br /> }<br /> public void finalize(){<br /> try{<br /> sSocket.close();<br /> }catch(IOException E){}<br /> sSocket = null;<br /> }<br />}<br />class ClientThread extends Thread{<br /> Socket cSocket;<br /> PrintStream write;<br /> BufferedReader read;<br /> ServerThread sThread;<br /> TextArea sStatus;<br /> String m;<br /> public static int ConnectNumber = 0;<br /> public ClientThread(Socket cSocket,ServerThread sThread){<br /> this.cSocket = cSocket;<br /> this.sThread = sThread;<br /> sStatus = sThread.frame.ServerStatus;<br /> ConnectNumber++;<br /> try{<br /> write = new PrintStream(cSocket.getOutputStream());<br /> read = new BufferedReader(<br /> new InputStreamReader(cSocket.getInputStream()));<br /> }catch(IOException E){<br /> System.out.println("發生異常:"+ E);<br /> System.out.println("建立I/O通道失敗!");<br /> System.exit(3);<br /> }<br /> m = "新夥伴<" + getClientName() + ">加入咯!!!";<br /> m = m + "聊天人數:" + ConnectNumber + "/n/n";<br /> sThread.messages.addElement(m);<br /> }<br /> public void run(){<br /> while(true){<br /> try{<br /> String Message = read.readLine();<br /> synchronized(sThread.messages){<br /> if(Message != null){<br /> if(Message.equals("bye")){<br /> ConnectNumber--;<br /> Message = getClientName() + ":" +<br /> getClientAddress() + "已離開";<br /> sStatus.append(Message + " ");<br /> sStatus.append("目前聯機數:" +<br /> ConnectNumber + "/n");<br /> sThread.messages.addElement(Message);<br /> synchronized(sThread.Clients){<br /> sThread.Clients.removeElement(this);<br /> }<br /> break;<br /> }else{<br /> Message = "來自" + getClientName() +<br /> ":" + getClientAddress() +<br /> "/n=>" + Message + "/n";<br /> sThread.messages.addElement(Message);<br /> }<br /> }<br /> }<br /> }catch(IOException e){<br /> break;<br /> }<br /> }<br /> }<br /> public String getClientName(){<br /> return cSocket.getInetAddress().getHostName();<br /> }<br /> public String getClientAddress(){<br /> return cSocket.getInetAddress().getHostAddress();<br /> }<br /> public void finalize(){<br /> try{<br /> read.close();<br /> write.close();<br /> cSocket.close();<br /> }catch(IOException E){<br /> }<br /> cSocket = null;<br /> }<br />}<br />class BroadCast extends Thread{<br /> ClientThread c;<br /> ServerThread sThread;<br /> String m;<br /> public BroadCast(ServerThread sThread){<br /> this.sThread = sThread;<br /> }<br /> public void run(){<br /> while(true){<br /> try{<br /> Thread.sleep(3000);<br /> }catch(InterruptedException E){}<br /> synchronized(sThread.messages){<br /> if(sThread.messages.isEmpty())<br /> continue;<br /> m = (String)sThread.messages.firstElement();<br /> sThread.messages.removeElement(m);<br /> }<br /> synchronized(sThread.Clients){<br /> for(int i=0;i<sThread.Clients.size();i++){<br /> c = (ClientThread)sThread.Clients.elementAt(i);<br /> c.write.println(m);<br /> }<br /> }<br /> }<br /> }<br />}<br />class CleanDeadConnect extends Thread{<br /> ServerThread sThread;<br /> ClientThread temp;<br /> String m;<br /> public CleanDeadConnect(ServerThread sThread){<br /> this.sThread = sThread;<br /> }<br /> public void run(){<br /> while(true){<br /> try{<br /> Thread.sleep(10000);<br /> }catch(InterruptedException E){}<br /> synchronized(sThread.Clients){<br /> for(int i=0;i<sThread.Clients.size();i++){<br /> temp = (ClientThread)sThread.Clients.elementAt(i);<br /> if(!temp.isAlive()){<br /> ClientThread.ConnectNumber--;<br /> m = temp.getClientName() +<br /> ":" + temp.getClientAddress();<br /> m = m + "已離開目前聯機數:" +<br /> ClientThread.ConnectNumber + "/n";<br /> sThread.frame.ServerStatus.append(m);<br /> synchronized(sThread.messages){<br /> sThread.messages.addElement(m);<br /> }<br /> sThread.Clients.removeElementAt(i);<br /> }<br /> }<br /> }<br /> }<br /> }<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.