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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chatserver.java

?? 通過網絡會議室代碼
?? JAVA
字號:
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);
  
  
  //以下為網絡相關變量
  static Vector clients=new Vector(10);   //用vector向量數組存儲連接客戶變量,最多允許5個客戶
  static ServerSocket server=null;        //建立服務器socket
  static int active_connects=0;           //用來存儲目前連接的客戶數
  static Socket socket=null;               //用來存儲一個套接字連接
  


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

  /**Construct the frame*/
  public chatServer()                          //chatServer類的構造器用來初始化一些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("簡易聊天服務器端");
    statusBar.setText("目前的連接數為:");
    
    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("服務器端連接客戶");
    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)   //實現退出菜單方法
{
    sendClients(new StringBuffer("QUIT"));                   //向客戶端發送斷開連接信息
	closeAll();                                               //調用closeAll方法關閉所有連接
	System.exit(0);
  }
  /**Help | About action performed*/
  public void jMenuHelpAbout_actionPerformed(ActionEvent e)  //實現about對話框,意義不大,可以去掉
  {
    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)          //實現關閉服務器程序要進行的操作
	  {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      jMenuFileExit_actionPerformed(null);
    }
  }



  /*以下實現各種方法*/
  public static void notifyRoom()                          //用來監視連接信息,不斷刷新clients數組并刷新客戶端用戶列表信息
	{
     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方法向客戶端發送信息
  }

  public static synchronized void sendClients(StringBuffer msg)   //實現sendClients方法專用來向每個連接的客戶端發送信息
	{
     for(int i=0;i<clients.size();i++)
		{
	     Client c=(Client)clients.elementAt(i);
		 c.send(msg);
	 }
  }

  public static void closeAll()                             //實現關閉所有連接信息
	{
     while(clients.size()>0)                                 //遍歷clients數組刪除所有連接客戶信息
		{
	     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)         //實現檢查連接客戶的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)         //實現斷開單個客戶的方法
	{
     try
		{
		 jList1.addItem(c.ip+"斷開連接");                      //在服務器端程序的list框中顯示斷開信息
		 
		 chatServer.active_connects--;                       //將連接數減1
	     c.send(new StringBuffer("QUIT"));                    //向客戶發送斷開連接信息
		 c.socket.close();
		 
	 }
	 catch(IOException e)
		{
	     System.out.println("Error:"+e);
	 }
	 finally
		{
	     clients.removeElement(c);                          //從clients數組中刪除此客戶的相關socket等信息
	 }
  }


}
class Client extends Thread                              //實現 Client線程類
  {
    Socket socket;                                       //用來存儲一個連接客戶的socket信息
	String name;                                         //用來存儲客戶的連接姓名
	String ip;                                           //用來存儲客戶的ip信息
 	DataInputStream dis;                                 //用來實現接受從客戶端發來的數據流
	PrintStream ps;                                      //用來實現向客戶端發送信息的打印流

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

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

	public void run()                                           //線程運行方法
	  {
	   while(true)
		  {
	       String line=null;
		   try
			  {
		       line=dis.readLine();                            //讀取客戶端發來的數據流
		       
		   }
		   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"))                          //如果關鍵字是MSG則是客戶端發來的聊天信息
			  {
		       StringBuffer msg=new StringBuffer("MSG:");     //在服務器端再重新建立一個字符緩沖
			   msg.append(name);
			   msg.append(st.nextToken("\0"));
			   chatServer.sendClients(msg);                   //再將某個客戶發來的聊天信息發送到每個連接客戶的聊天欄中
		   }
		   else if(keyword.equals("QUIT"))                   //如果關鍵字是QUIT則是客戶端發來斷開連接的信息
			  {
		       
		       chatServer.disconnect(this);                  //服務器斷開與這個客戶的連接
			   chatServer.notifyRoom();                      //繼續監聽聊天室并刷新其他客戶的聊天人名list
			   this.stop();                                   
		   }
	   }
	}
  }  //end of class Client

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一综合色| 图片区小说区区亚洲影院| 在线观看视频欧美| 国产乱子伦一区二区三区国色天香| 国产精品久久久久久久久免费樱桃| 欧美肥妇free| 99精品国产99久久久久久白柏| 日本va欧美va欧美va精品| 亚洲精品va在线观看| 久久精品视频一区| 日韩欧美成人午夜| 欧美日韩一区高清| 色综合天天做天天爱| 粉嫩一区二区三区性色av| 青娱乐精品视频| 亚洲午夜久久久久久久久久久| 国产三级久久久| 精品伦理精品一区| 91精品国产麻豆| 欧美乱熟臀69xxxxxx| 色94色欧美sute亚洲线路一ni | 国产一区二区三区久久悠悠色av| 夜夜嗨av一区二区三区四季av| 国产精品二区一区二区aⅴ污介绍| 欧美一级片在线看| 欧美日本国产一区| 欧美影院午夜播放| 在线观看91精品国产入口| av在线播放一区二区三区| 国产馆精品极品| 国产精品一区二区在线看| 日本欧美久久久久免费播放网| 亚洲成人av中文| 亚洲成人av中文| 亚洲国产精品一区二区久久 | 99久久精品免费精品国产| 国产麻豆精品久久一二三| 久久99国产精品久久| 日韩成人av影视| 奇米影视一区二区三区小说| 日韩av电影天堂| 日本欧美一区二区三区| 爽好多水快深点欧美视频| 婷婷丁香激情综合| 亚洲精品国产精华液| 亚洲综合免费观看高清完整版| 亚洲欧美另类久久久精品| 国产精品久久久久久久久久免费看 | 国产精品久久久久久久久免费相片| 中文欧美字幕免费| 国产精品久久久一本精品 | 中文字幕在线观看不卡| 亚洲欧美区自拍先锋| 亚洲激情自拍偷拍| 亚洲成人三级小说| 免费观看日韩av| 国产一区二区三区精品视频| 成人视屏免费看| 在线观看免费亚洲| 欧美一区二区三级| 国产免费久久精品| 一区二区三区在线影院| 肉肉av福利一精品导航| 精品系列免费在线观看| jlzzjlzz亚洲女人18| 欧美影视一区二区三区| 日韩欧美在线不卡| 日本一区二区动态图| 一区二区三区影院| 裸体健美xxxx欧美裸体表演| 国产一区二区免费在线| 色久优优欧美色久优优| 日韩一级黄色片| 国产精品麻豆视频| 亚州成人在线电影| 国产91在线观看丝袜| 91传媒视频在线播放| 欧美www视频| 亚洲欧洲av色图| 蜜桃久久av一区| 成人免费看视频| 6080午夜不卡| 国产精品理论片在线观看| 午夜电影网一区| 国产不卡一区视频| 欧美欧美午夜aⅴ在线观看| 久久久久久久综合色一本| 亚洲精品国久久99热| 另类小说色综合网站| 色偷偷88欧美精品久久久| 亚洲第一搞黄网站| 国产成人一级电影| 91精品国产麻豆国产自产在线| 国产精品传媒在线| 久久成人久久鬼色| 欧美午夜理伦三级在线观看| 久久综合av免费| 亚洲永久精品大片| 成人国产在线观看| 精品精品国产高清一毛片一天堂| 亚洲综合区在线| 成年人网站91| 精品福利在线导航| 婷婷夜色潮精品综合在线| 91在线porny国产在线看| xfplay精品久久| 日韩av中文字幕一区二区| 91黄色小视频| 亚洲欧美在线aaa| 国产精品综合二区| 日韩欧美aaaaaa| 日韩在线卡一卡二| 欧美亚洲精品一区| 亚洲欧美日本在线| av成人老司机| 国产午夜一区二区三区| 久久电影网电视剧免费观看| 欧美另类videos死尸| 亚洲精品久久久蜜桃| 99久久精品一区二区| 中文无字幕一区二区三区 | 亚洲va天堂va国产va久| bt欧美亚洲午夜电影天堂| 国产日韩av一区| 久久精品99国产精品日本| 欧美一区二区视频在线观看2020| 亚洲国产精品欧美一二99| 91在线视频播放地址| 综合亚洲深深色噜噜狠狠网站| 国产原创一区二区三区| 精品捆绑美女sm三区| 久久99精品久久久| 日韩欧美三级在线| 日本aⅴ精品一区二区三区| 欧美日韩国产乱码电影| 亚洲国产日产av| 欧美精品久久久久久久多人混战 | 悠悠色在线精品| 色婷婷综合久久久| 亚洲精选免费视频| 欧美在线观看一二区| 亚洲一线二线三线久久久| 欧美丝袜丝交足nylons图片| 一区二区理论电影在线观看| 色哦色哦哦色天天综合| 亚洲免费观看高清在线观看| 在线观看视频一区二区| 亚洲bdsm女犯bdsm网站| 91精品欧美一区二区三区综合在 | 国产成人av一区| 国产日产欧产精品推荐色 | 精品国产乱码久久久久久老虎| 精品一区二区影视| 免费的成人av| 久久久亚洲高清| 不卡区在线中文字幕| 尤物av一区二区| 宅男在线国产精品| 捆绑调教一区二区三区| 亚洲精品一区二区在线观看| 国产精品一区在线观看你懂的| 中文字幕av一区二区三区免费看 | 奇米色777欧美一区二区| 日韩精品影音先锋| 粉嫩av一区二区三区在线播放| 国产精品国产三级国产普通话三级| 成人精品在线视频观看| 亚洲福中文字幕伊人影院| 日韩欧美精品三级| 盗摄精品av一区二区三区| 亚洲午夜免费电影| 337p日本欧洲亚洲大胆精品| aaa欧美大片| 丝袜美腿亚洲色图| 国产片一区二区| 欧美在线free| 国产伦精品一区二区三区免费| 中文字幕永久在线不卡| 51精品国自产在线| 丁香天五香天堂综合| 亚洲综合精品自拍| 久久综合国产精品| 欧美性xxxxxxxx| 成人理论电影网| 免费成人在线网站| 亚洲欧美aⅴ...| 精品国产伦一区二区三区免费| 色8久久人人97超碰香蕉987| 麻豆精品视频在线| 亚洲男人天堂一区| 久久亚洲影视婷婷| 欧美伊人久久大香线蕉综合69| 国产精品亚洲成人| 香蕉久久一区二区不卡无毒影院 | 亚洲小说春色综合另类电影| 精品对白一区国产伦| 欧美视频在线观看一区二区| 国产iv一区二区三区| 美女久久久精品| 亚洲尤物视频在线|