亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? chatserver.java

?? 用java編寫(xiě)的一個(gè)簡(jiǎn)單聊天室
?? JAVA
字號(hào):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;


public class chatServer extends JFrame {
  //以下為圖形界面變量
  JPanel contentPane;
  JMenuBar jMenuBar1 = new JMenuBar();
  JMenu jMenuFile = new JMenu();
  JMenuItem jMenuFileExit = new JMenuItem();
  JMenu jMenuHelp = new JMenu();
  JMenuItem jMenuHelpAbout = new JMenuItem();
  JLabel statusBar = new JLabel();
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel1 = new JPanel();
  BorderLayout borderLayout2 = new BorderLayout();
  JLabel jLabel1 = new JLabel();
  static java.awt.List jList1 = new java.awt.List(13);
 
  JScrollPane scrollpane=new JScrollPane(jList1);
  
  
  //以下為網(wǎng)絡(luò)相關(guān)變量
  static Vector clients=new Vector(10);   //用vector向量數(shù)組存儲(chǔ)連接客戶(hù)變量
  static ServerSocket server=null;        //建立服務(wù)器socket
  static int active_connects=0;           //用來(lái)存儲(chǔ)目前連接的客戶(hù)數(shù)
  static Socket socket=null;               //用來(lái)存儲(chǔ)一個(gè)套接字連接
  


  //chatServer main method
   public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    chatServer chatServer1=new chatServer();      //實(shí)例化一個(gè)chatServer類(lèi)
	chatServer1.show();
	System.out.println("Server starting ...");
	
	try
	   {
	    server=new ServerSocket(2525);      //使用端口2525初始化服務(wù)器套接字
	}
	catch(IOException e)
	   {
	    System.out.println("Error:"+e);
	}
	while(true)
	   {
	   
	    if(clients.size()<5)       //當(dāng)客戶(hù)數(shù)小于5個(gè)時(shí)開(kāi)始連接
		   {
		    try
			   {
			    socket=server.accept();   //用來(lái)存儲(chǔ)連接上的客戶(hù)socket
			    if(socket!=null)
			    {
			    System.out.println(socket+"連接");    //在控制臺(tái)打印客戶(hù)連接信息
			    
			    
			 }
			}
			catch(IOException e)
			   {
			    System.out.println("Error:"+e);
			}
			int i=0;
			
			
			   do{
			    
			    Client c=new Client(socket);      //定義并實(shí)例化一個(gè)Client線程類(lèi),一個(gè)就對(duì)應(yīng)一個(gè)客戶(hù)連接
			    clients.addElement(c);             //加入clients數(shù)組中
				if(checkName(c))                  //調(diào)用checkName方法驗(yàn)證c的合法性
				   {
				    int connum=++chatServer1.active_connects;  //定義connum來(lái)存儲(chǔ)活動(dòng)連接數(shù)
				    String constr="目前有"+connum+"客戶(hù)相連";    //在狀態(tài)欄里顯示連接數(shù)
				    chatServer1.statusBar.setText(constr);
				    Client listdata=(Client)clients.elementAt(i);   //將連接客戶(hù)的socket信息存儲(chǔ)進(jìn)listdata數(shù)組
				    
				    chatServer1.jList1.addItem(listdata.ip+"連接",i);  //將客戶(hù)socket信息寫(xiě)入list框
				    c.start();                                        //啟動(dòng)線程
					notifyRoom();                                    //用notifyRoom方法來(lái)監(jiān)視聊天室連接變化
					                                                 //不斷改變clients數(shù)組并刷新客戶(hù)端信息
					
				}
				else
				   {
				    //如果名字不合法
				    c.ps.println("TAKEN");
				    
					disconnect(c);
					
				}
				i++;
				break;
				
			}
			while(i<clients.size());
			
		}
		else                                   //如果clients數(shù)組超過(guò)了5個(gè)
		   {
			try{Thread.sleep(200);}
			catch(InterruptedException e)
			   {
			}
		}
	}//end of while
  }// end of main method

  /**Construct the frame*/
  public chatServer()                          //chatServer類(lèi)的構(gòu)造器用來(lái)初始化一些UI信息
  {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  /**Component initialization*/
  private void jbInit() throws Exception  {
    //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(borderLayout1);
    this.setSize(new Dimension(400, 300));
    this.setTitle("簡(jiǎn)易聊天服務(wù)器端");
    statusBar.setText("目前的連接數(shù)為:");
    
    jMenuFile.setText("File");
    jMenuFileExit.setText("Exit");
    jMenuFileExit.addActionListener(new ActionListener()  {
      public void actionPerformed(ActionEvent e) {
        jMenuFileExit_actionPerformed(e);
      }
    });
    jMenuHelp.setText("Help");
    jMenuHelpAbout.setText("About");
    jMenuHelpAbout.addActionListener(new ActionListener()  {
      public void actionPerformed(ActionEvent e) {
        jMenuHelpAbout_actionPerformed(e);
      }
    });
    
    
    jPanel1.setLayout(borderLayout2);
    jLabel1.setText("服務(wù)器端連接客戶(hù)");
    jMenuFile.add(jMenuFileExit);
    jMenuHelp.add(jMenuHelpAbout);
    jMenuBar1.add(jMenuFile);
    jMenuBar1.add(jMenuHelp);
    this.setJMenuBar(jMenuBar1);
    contentPane.add(statusBar, BorderLayout.SOUTH);
    contentPane.add(jPanel1, BorderLayout.CENTER);
    jPanel1.add(jLabel1,  BorderLayout.NORTH);
    jPanel1.add(scrollpane, BorderLayout.CENTER);

	
  }//end of jbinit
  /**File | Exit action performed*/
  public void jMenuFileExit_actionPerformed(ActionEvent e)   //實(shí)現(xiàn)退出菜單方法
{
    sendClients(new StringBuffer("QUIT"));                   //向客戶(hù)端發(fā)送斷開(kāi)連接信息
	closeAll();                                               //調(diào)用closeAll方法關(guān)閉所有連接
	System.exit(0);
  }
  /**Help | About action performed*/
  public void jMenuHelpAbout_actionPerformed(ActionEvent e)  //實(shí)現(xiàn)about對(duì)話框,意義不大,可以去掉
  {
    chatServer_AboutBox dlg = new chatServer_AboutBox(this);
    Dimension dlgSize = dlg.getPreferredSize();
    Dimension frmSize = getSize();
    Point loc = getLocation();
    dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
    dlg.setModal(true);
    dlg.show();
  }                                
  /**Overridden so we can exit when window is closed*/
  protected void processWindowEvent(WindowEvent e)          //實(shí)現(xiàn)關(guān)閉服務(wù)器程序要進(jìn)行的操作
	  {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      jMenuFileExit_actionPerformed(null);
    }
  }



  /*以下實(shí)現(xiàn)各種方法*/
  public static void notifyRoom()                          //用來(lái)監(jiān)視連接信息,不斷刷新clients數(shù)組并刷新客戶(hù)端用戶(hù)列表信息
	{
     StringBuffer people=new StringBuffer("PEOPLE");
	 for(int i=0;i<clients.size();i++)
		{
	     Client c=(Client)clients.elementAt(i);
		 people.append(":"+c.name);
		 
	 }
	 sendClients(people);                                 //用sendClients方法向客戶(hù)端發(fā)送信息
  }

  public static synchronized void sendClients(StringBuffer msg)   //實(shí)現(xiàn)sendClients方法專(zhuān)用來(lái)向每個(gè)連接的客戶(hù)端發(fā)送信息
	{
     for(int i=0;i<clients.size();i++)
		{
	     Client c=(Client)clients.elementAt(i);
		 c.send(msg);
	 }
  }

  public static void closeAll()                             //實(shí)現(xiàn)關(guān)閉所有連接信息
	{
     while(clients.size()>0)                                 //遍歷clients數(shù)組刪除所有連接客戶(hù)信息
		{
	     Client c=(Client)clients.firstElement();
		 try
			{
		     c.socket.close();
		 }
		 catch(IOException e)
			{
		     System.out.println("Error:"+e);
		 }
		 finally
			{
		     clients.removeElement(c);
		 }
	 }//end of while
  }//end of closeAll method

  public static boolean checkName(Client newclient)         //實(shí)現(xiàn)檢查連接客戶(hù)的socket信息是否合法
	{
     for(int i=0;i<clients.size();i++)
		{
	     Client c=(Client)clients.elementAt(i);
		 if((c!=newclient)&&c.equals(newclient.name))
			 return false;
	 }
	 return(true);
  }//end of checkName method

  public static synchronized void disconnect(Client c)         //實(shí)現(xiàn)斷開(kāi)單個(gè)客戶(hù)的方法
	{
     try
		{
		 jList1.addItem(c.ip+"斷開(kāi)連接");                      //在服務(wù)器端程序的list框中顯示斷開(kāi)信息
		 
		 chatServer.active_connects--;                       //將連接數(shù)減1
	     c.send(new StringBuffer("QUIT"));                    //向客戶(hù)發(fā)送斷開(kāi)連接信息
		 c.socket.close();
		 
	 }
	 catch(IOException e)
		{
	     System.out.println("Error:"+e);
	 }
	 finally
		{
	     clients.removeElement(c);                          //從clients數(shù)組中刪除此客戶(hù)的相關(guān)socket等信息
	 }
  }


}
class Client extends Thread                              //實(shí)現(xiàn) Client線程類(lèi)
  {
    Socket socket;                                       //用來(lái)存儲(chǔ)一個(gè)連接客戶(hù)的socket信息
	String name;                                         //用來(lái)存儲(chǔ)客戶(hù)的連接姓名
	String ip;                                           //用來(lái)存儲(chǔ)客戶(hù)的ip信息
 	DataInputStream dis;                                 //用來(lái)實(shí)現(xiàn)接受從客戶(hù)端發(fā)來(lái)的數(shù)據(jù)流
	PrintStream ps;                                      //用來(lái)實(shí)現(xiàn)向客戶(hù)端發(fā)送信息的打印流

	public void send(StringBuffer msg)                   //實(shí)現(xiàn)想客戶(hù)端發(fā)送信息的方法
	  {
	   ps.println(msg);                                  //用打印流發(fā)送信息
	   ps.flush();
	}

	public  Client(Socket s)                             //Client線程類(lèi)的構(gòu)造器
	  {
	   socket=s;                                           
	   try
		  {
	       dis=new DataInputStream(s.getInputStream());  //存儲(chǔ)特定客戶(hù)socket的輸入流接受s這個(gè)客戶(hù)發(fā)送到服務(wù)器端的信息
		   ps=new PrintStream(s.getOutputStream());      //存儲(chǔ)特定客戶(hù)socket的輸出流發(fā)送服務(wù)器給s這個(gè)客戶(hù)的信息
		   String info=dis.readLine();                   //讀取接受來(lái)的信息
		   
		   StringTokenizer stinfo=new StringTokenizer(info,":");  //用StringTokenizer類(lèi)來(lái)讀取用":"分段字符
		   String head=stinfo.nextToken();                        //head用來(lái)存儲(chǔ)類(lèi)似于關(guān)鍵字的頭信息
           if(stinfo.hasMoreTokens())		   
		   name=stinfo.nextToken();                               //關(guān)鍵字后的第二段數(shù)據(jù)是客戶(hù)名信息
		   if(stinfo.hasMoreTokens())
		   ip=stinfo.nextToken();                                  //關(guān)鍵字后的第三段數(shù)據(jù)是客戶(hù)ip信息
		   System.out.println(head);                               //在控制臺(tái)打印頭信息
	   }
	   catch(IOException e)
		  {
	       System.out.println("Error:"+e);
	   }
	}//end of Client constrator

	public void run()                                           //線程運(yùn)行方法
	  {
	   while(true)
		  {
	       String line=null;
		   try
			  {
		       line=dis.readLine();                            //讀取客戶(hù)端發(fā)來(lái)的數(shù)據(jù)流
		       
		   }
		   catch(IOException e)
			  {
		       System.out.println("Error"+e);
			   chatServer.disconnect(this);
			   chatServer.notifyRoom();
			   return;
		   }

		   if(line==null)    //客戶(hù)已離開(kāi)
			  {
			   chatServer.disconnect(this);
			   chatServer.notifyRoom();
			   return;
			  }
		   
		   StringTokenizer st=new StringTokenizer(line,":");
		   String keyword=st.nextToken();

		   if(keyword.equals("MSG"))                          //如果關(guān)鍵字是MSG則是客戶(hù)端發(fā)來(lái)的聊天信息
			  {
		       StringBuffer msg=new StringBuffer("MSG:");     //在服務(wù)器端再重新建立一個(gè)字符緩沖
			   msg.append(name);
			   msg.append(st.nextToken("\0"));
			   chatServer.sendClients(msg);                   //再將某個(gè)客戶(hù)發(fā)來(lái)的聊天信息發(fā)送到每個(gè)連接客戶(hù)的聊天欄中
		   }
		   else if(keyword.equals("QUIT"))                   //如果關(guān)鍵字是QUIT則是客戶(hù)端發(fā)來(lái)斷開(kāi)連接的信息
			  {
		       
		       chatServer.disconnect(this);                  //服務(wù)器斷開(kāi)與這個(gè)客戶(hù)的連接
			   chatServer.notifyRoom();                      //繼續(xù)監(jiān)聽(tīng)聊天室并刷新其他客戶(hù)的聊天人名list
			   this.stop();                                   
		   }
	   }
	}
  }  //end of class Client

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人伊人久久综合网| 精品美女在线播放| 久久69国产一区二区蜜臀| 中文成人综合网| 欧美一卡二卡在线| 97久久精品人人爽人人爽蜜臀| 日韩vs国产vs欧美| 亚洲少妇30p| 久久久久久久久久久电影| 精品婷婷伊人一区三区三| 不卡欧美aaaaa| 国产一区二区三区国产| 日韩一区欧美二区| 亚洲激情第一区| 欧美精彩视频一区二区三区| 91精品国产色综合久久ai换脸| 91在线一区二区| 国产99久久久久久免费看农村| 天天av天天翘天天综合网色鬼国产| 中文字幕中文字幕一区| 久久一区二区三区国产精品| 5858s免费视频成人| 色婷婷香蕉在线一区二区| 国产精品综合在线视频| 麻豆精品久久久| 日韩中文字幕亚洲一区二区va在线 | 欧美亚洲一区二区三区四区| 成人高清伦理免费影院在线观看| 九九久久精品视频| 日韩—二三区免费观看av| 亚洲午夜久久久久久久久久久| 国产精品乱人伦中文| 欧美极品美女视频| 中文天堂在线一区| 国产精品视频在线看| 国产日韩欧美综合一区| 欧美国产日韩a欧美在线观看 | 夜夜精品浪潮av一区二区三区| 欧美国产精品专区| 国产精品天干天干在线综合| 久久久精品黄色| 久久亚洲免费视频| 久久夜色精品国产噜噜av| 久久日韩粉嫩一区二区三区| 精品国产1区2区3区| 久久综合视频网| 欧美成人r级一区二区三区| 日韩欧美一二区| 亚洲精品一区在线观看| 国产欧美精品在线观看| 日本一区二区三区视频视频| 国产精品久久久久久久裸模| 亚洲色图清纯唯美| 亚洲综合激情另类小说区| 亚洲成人免费影院| 日韩极品在线观看| 国产在线播放一区二区三区| 国产suv精品一区二区883| 99精品国产99久久久久久白柏| av午夜精品一区二区三区| 欧美亚洲高清一区二区三区不卡| 欧美日韩黄色一区二区| 日韩欧美不卡在线观看视频| 久久亚洲精品小早川怜子| 中文字幕一区二| 亚洲国产乱码最新视频 | 久久午夜老司机| 国产精品三级av| 亚洲自拍偷拍九九九| 美女精品一区二区| 成人免费视频一区| 欧美性色欧美a在线播放| 91精品国产综合久久久久久久久久| 精品久久久久久亚洲综合网| 国产精品久久久久毛片软件| 亚洲一区二区黄色| 狠狠久久亚洲欧美| 91亚洲资源网| 日韩精品中午字幕| 最新高清无码专区| 毛片av一区二区三区| 99免费精品视频| 7777精品伊人久久久大香线蕉的 | 久久青草欧美一区二区三区| 亚洲男人天堂一区| 精品一区二区三区欧美| 91在线播放网址| 欧美成人a在线| 亚洲精品视频自拍| 国产曰批免费观看久久久| 在线一区二区三区| 久久综合五月天婷婷伊人| 亚洲高清不卡在线观看| 国产成人夜色高潮福利影视| 欧美日韩电影在线| 国产精品国产自产拍高清av王其 | 亚洲天堂a在线| 国产一区二区三区观看| 欧美日韩一区精品| 国产精品国产馆在线真实露脸| 亚洲va国产天堂va久久en| 成人高清视频在线| www成人在线观看| 亚洲第一成人在线| 91热门视频在线观看| 久久精品亚洲麻豆av一区二区| 亚洲愉拍自拍另类高清精品| 国产传媒欧美日韩成人| 欧美一区二区三区在线看| 一区二区三区欧美视频| 成人天堂资源www在线| 精品欧美一区二区久久| 午夜国产精品一区| 91国产精品成人| 亚洲欧美一区二区久久| 粗大黑人巨茎大战欧美成人| 26uuu精品一区二区在线观看| 午夜成人在线视频| 色av成人天堂桃色av| 亚洲私人影院在线观看| 成人app软件下载大全免费| 久久亚洲综合色一区二区三区| 视频在线在亚洲| 欧美精品vⅰdeose4hd| 亚洲综合丁香婷婷六月香| 色哟哟一区二区在线观看| 亚洲色图清纯唯美| 91免费观看视频在线| 国产精品福利一区二区| 不卡高清视频专区| 中文字幕制服丝袜一区二区三区| 国产福利精品导航| 久久久久高清精品| 国产成人精品aa毛片| 中文字幕不卡三区| 成人免费视频免费观看| 国产精品麻豆一区二区| 白白色 亚洲乱淫| 国产精品成人免费| 色94色欧美sute亚洲线路二| 一区二区三区在线影院| 欧洲色大大久久| 亚洲成人精品在线观看| 欧美日韩国产首页| 日本午夜一区二区| 日韩美女一区二区三区| 久久www免费人成看片高清| 精品国产123| 成人性生交大片免费看中文网站| 国产日韩欧美麻豆| 99久久精品费精品国产一区二区| 亚洲欧美自拍偷拍色图| 在线一区二区视频| 日韩一区欧美二区| 久久女同互慰一区二区三区| 粉嫩一区二区三区在线看| 亚洲欧美国产毛片在线| 欧美日韩欧美一区二区| 美女诱惑一区二区| 国产精品色婷婷| 欧美日韩一级片网站| 久久精品国产亚洲高清剧情介绍| 久久久99精品免费观看| 97se亚洲国产综合自在线观| 亚洲18色成人| 久久综合av免费| 91啪在线观看| 日本免费新一区视频| 国产三区在线成人av| 日本韩国欧美一区二区三区| 日韩黄色免费网站| 日本一区二区不卡视频| 欧美日韩高清在线播放| 激情小说欧美图片| 亚洲欧美电影一区二区| 91精品国产91综合久久蜜臀| 国产福利91精品| 亚洲国产色一区| 久久精品欧美日韩| 91日韩精品一区| 国内成人精品2018免费看| 亚洲婷婷综合久久一本伊一区 | 国产三级精品三级在线专区| 色播五月激情综合网| 国产伦理精品不卡| 一区二区高清免费观看影视大全| 日韩视频在线你懂得| 91免费版pro下载短视频| 麻豆国产91在线播放| 综合欧美亚洲日本| 欧美精品一区二| 在线免费观看不卡av| 国产福利不卡视频| 日韩国产高清影视| 亚洲美女视频一区| 国产视频一区二区在线观看| 欧美喷潮久久久xxxxx| 成+人+亚洲+综合天堂| 久久精品久久综合| 亚洲综合丁香婷婷六月香|