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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chatserver.java

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

  /**Construct the frame*/
  public chatServer()                          //chatServer類的構(gòu)造器用來初始化一些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ù)器端連接客戶");
    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"));                   //向客戶端發(fā)送斷開連接信息
	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()                          //用來監(jiān)視連接信息,不斷刷新clients數(shù)組并刷新客戶端用戶列表信息
	{
     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方法向客戶端發(fā)送信息
  }

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


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

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

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

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

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一二三区视频| 午夜精品aaa| 日韩成人免费电影| 国产成人综合在线| 欧美精品99久久久**| 国产精品久久久久久久午夜片 | 天堂午夜影视日韩欧美一区二区| 精品一区二区久久久| 欧洲av一区二区嗯嗯嗯啊| 久久久久88色偷偷免费| 日韩高清在线一区| 欧美亚洲高清一区| 亚洲男同性恋视频| 成人午夜视频福利| 日韩精品中午字幕| 日本三级亚洲精品| 欧美区一区二区三区| 亚洲欧美经典视频| 波多野结衣中文字幕一区 | 久久se这里有精品| 欧美三级电影在线观看| 一区二区在线观看不卡| 91在线免费视频观看| 日本一区二区免费在线观看视频 | 精品一区二区三区的国产在线播放| 欧美体内she精高潮| 亚洲欧美一区二区在线观看| 国产成人99久久亚洲综合精品| 精品国产3级a| 韩国女主播一区| 欧美成人伊人久久综合网| 欧美aaaaa成人免费观看视频| 欧美视频在线不卡| 午夜视频在线观看一区二区三区| 欧美亚洲另类激情小说| 亚洲国产美女搞黄色| 在线观看一区不卡| 午夜激情一区二区| 91精品国产一区二区人妖| 日韩精品免费视频人成| 日韩精品一区二区三区视频在线观看 | 国产精品色噜噜| 青青草国产成人av片免费| 91精品免费在线| 免费国产亚洲视频| 久久久精品免费免费| 国产91丝袜在线播放| 亚洲欧洲99久久| 在线这里只有精品| 视频一区中文字幕国产| 久久先锋影音av鲁色资源网| 盗摄精品av一区二区三区| 18成人在线观看| 91久久一区二区| 蜜桃一区二区三区在线| 久久精品人人爽人人爽| 色伊人久久综合中文字幕| 亚洲va韩国va欧美va| 欧美白人最猛性xxxxx69交| 国产成人精品免费看| 亚洲美女淫视频| 日韩欧美色综合| 99久久er热在这里只有精品15 | ww亚洲ww在线观看国产| 99国产精品视频免费观看| 天堂久久一区二区三区| 国产视频视频一区| 欧美日韩国产美女| 国产91富婆露脸刺激对白| 亚洲精品国产一区二区精华液| 日韩欧美一二三| 色网站国产精品| 国产在线精品一区二区不卡了| 亚洲精品一二三| 久久久久久夜精品精品免费| 91久久香蕉国产日韩欧美9色| 国内精品伊人久久久久av一坑| 自拍偷拍国产亚洲| 久久综合九色综合97_久久久| 99re成人在线| 国产中文一区二区三区| 午夜精品免费在线| 国产精品久久三区| 精品国产一区二区亚洲人成毛片| 色综合色狠狠天天综合色| 精品一区二区久久| 亚洲综合一二三区| 国产日产亚洲精品系列| 91精品国产乱| 日本韩国一区二区| 国产91对白在线观看九色| 麻豆精品久久久| 亚洲成a天堂v人片| 亚洲免费电影在线| 国产精品天干天干在观线| 日韩精品一区国产麻豆| 欧美伦理影视网| 色欧美日韩亚洲| 91亚洲男人天堂| 国产999精品久久| 狠狠狠色丁香婷婷综合激情| 五月天婷婷综合| 亚洲大片在线观看| 一区二区三区久久久| 成人欧美一区二区三区视频网页| 久久亚洲一级片| 精品国产欧美一区二区| 日韩午夜在线观看| 69成人精品免费视频| 欧美三级电影网| 欧美性生活影院| 欧美性受xxxx黑人xyx| 91精品福利视频| 色老汉一区二区三区| 色婷婷久久久综合中文字幕| 一本色道久久综合亚洲aⅴ蜜桃 | 色悠悠久久综合| 91麻豆成人久久精品二区三区| 成人精品视频一区二区三区| 成人性生交大片免费看在线播放| 懂色av中文一区二区三区| 大胆欧美人体老妇| aaa亚洲精品| 91高清视频免费看| 欧美视频在线一区二区三区| 欧美系列亚洲系列| 7777精品伊人久久久大香线蕉超级流畅 | 成人动漫一区二区三区| 风间由美性色一区二区三区| 成人国产精品免费网站| 国产91精品免费| 91在线视频免费观看| 欧美日韩视频第一区| 日韩视频在线你懂得| 久久久亚洲高清| 成人欧美一区二区三区黑人麻豆 | av一区二区三区在线| 91丨porny丨户外露出| 欧美亚洲高清一区二区三区不卡| 欧美日韩第一区日日骚| xf在线a精品一区二区视频网站| 国产日韩成人精品| 伊人色综合久久天天| 免费精品视频在线| 成人一区二区三区中文字幕| 色猫猫国产区一区二在线视频| 欧美日韩久久不卡| 欧美精品一区二区三区高清aⅴ | 欧美大片顶级少妇| 国产精品成人免费| 日韩黄色小视频| 成人激情免费电影网址| 欧美日韩国产在线播放网站| 久久久亚洲综合| 亚洲一区在线视频| 国产在线麻豆精品观看| 日本道色综合久久| 久久综合九色综合97婷婷女人| 亚洲女同ⅹxx女同tv| 精品一区二区精品| 欧美唯美清纯偷拍| 中文子幕无线码一区tr| 日韩精品五月天| 91丨九色丨国产丨porny| 日韩三级在线免费观看| √…a在线天堂一区| 美女www一区二区| 在线观看成人免费视频| 国产婷婷色一区二区三区四区 | 国产成人午夜高潮毛片| 精品视频在线免费| 国产精品免费视频网站| 另类小说一区二区三区| 欧美日韩国产综合久久| 亚洲欧洲性图库| 国产成人在线电影| 日韩精品一区二区三区视频播放| 亚洲愉拍自拍另类高清精品| 国产91在线|亚洲| xfplay精品久久| 青草国产精品久久久久久| 欧美性感一区二区三区| 国产精品国产a| 成人综合婷婷国产精品久久蜜臀| 日韩欧美一区二区久久婷婷| 香蕉久久夜色精品国产使用方法 | 91九色最新地址| 日韩理论片一区二区| 国产成人综合视频| 久久久激情视频| 精品无人区卡一卡二卡三乱码免费卡| 欧美午夜片在线看| 亚洲天堂a在线| 99久久国产免费看| 国产精品国产自产拍高清av | 极品尤物av久久免费看| 91精品啪在线观看国产60岁| 亚洲成a人v欧美综合天堂下载| 91免费视频网址| 亚洲精品视频自拍|