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

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

?? 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);
  
  
  //以下為網(wǎng)絡(luò)相關(guān)變量
  static Vector clients=new Vector(10);   //用vector向量數(shù)組存儲連接客戶變量
  static ServerSocket server=null;        //建立服務(wù)器socket
  static int active_connects=0;           //用來存儲目前連接的客戶數(shù)
  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初始化服務(wù)器套接字
	}
	catch(IOException e)
	   {
	    System.out.println("Error:"+e);
	}
	while(true)
	   {
	   
	    if(clients.size()<5)       //當客戶數(shù)小于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數(shù)組中
				if(checkName(c))                  //調(diào)用checkName方法驗證c的合法性
				   {
				    int connum=++chatServer1.active_connects;  //定義connum來存儲活動連接數(shù)
				    String constr="目前有"+connum+"客戶相連";    //在狀態(tài)欄里顯示連接數(shù)
				    chatServer1.statusBar.setText(constr);
				    Client listdata=(Client)clients.elementAt(i);   //將連接客戶的socket信息存儲進listdata數(shù)組
				    
				    chatServer1.jList1.addItem(listdata.ip+"連接",i);  //將客戶socket信息寫入list框
				    c.start();                                        //啟動線程
					notifyRoom();                                    //用notifyRoom方法來監(jiān)視聊天室連接變化
					                                                 //不斷改變clients數(shù)組并刷新客戶端信息
					
				}
				else
				   {
				    //如果名字不合法
				    c.ps.println("TAKEN");
				    
					disconnect(c);
					
				}
				i++;
				break;
				
			}
			while(i<clients.size());
			
		}
		else                                   //如果clients數(shù)組超過了5個
		   {
			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("簡易聊天服務(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)   //實現(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)  //實現(xiàn)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)          //實現(xiàn)關(guān)閉服務(wù)器程序要進行的操作
	  {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      jMenuFileExit_actionPerformed(null);
    }
  }



  /*以下實現(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)   //實現(xiàn)sendClients方法專用來向每個連接的客戶端發(fā)送信息
	{
     for(int i=0;i<clients.size();i++)
		{
	     Client c=(Client)clients.elementAt(i);
		 c.send(msg);
	 }
  }

  public static void closeAll()                             //實現(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)         //實現(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)         //實現(xiàn)斷開單個客戶的方法
	{
     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                              //實現(xiàn) Client線程類
  {
    Socket socket;                                       //用來存儲一個連接客戶的socket信息
	String name;                                         //用來存儲客戶的連接姓名
	String ip;                                           //用來存儲客戶的ip信息
 	DataInputStream dis;                                 //用來實現(xiàn)接受從客戶端發(fā)來的數(shù)據(jù)流
	PrintStream ps;                                      //用來實現(xiàn)向客戶端發(fā)送信息的打印流

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

	public  Client(Socket s)                             //Client線程類的構(gòu)造器
	  {
	   socket=s;                                           
	   try
		  {
	       dis=new DataInputStream(s.getInputStream());  //存儲特定客戶socket的輸入流接受s這個客戶發(fā)送到服務(wù)器端的信息
		   ps=new PrintStream(s.getOutputStream());      //存儲特定客戶socket的輸出流發(fā)送服務(wù)器給s這個客戶的信息
		   String info=dis.readLine();                   //讀取接受來的信息
		   
		   StringTokenizer stinfo=new StringTokenizer(info,":");  //用StringTokenizer類來讀取用":"分段字符
		   String head=stinfo.nextToken();                        //head用來存儲類似于關(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);                               //在控制臺打印頭信息
	   }
	   catch(IOException e)
		  {
	       System.out.println("Error:"+e);
	   }
	}//end of Client constrator

	public void run()                                           //線程運行方法
	  {
	   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ù)器端再重新建立一個字符緩沖
			   msg.append(name);
			   msg.append(st.nextToken("\0"));
			   chatServer.sendClients(msg);                   //再將某個客戶發(fā)來的聊天信息發(fā)送到每個連接客戶的聊天欄中
		   }
		   else if(keyword.equals("QUIT"))                   //如果關(guān)鍵字是QUIT則是客戶端發(fā)來斷開連接的信息
			  {
		       
		       chatServer.disconnect(this);                  //服務(wù)器斷開與這個客戶的連接
			   chatServer.notifyRoom();                      //繼續(xù)監(jiān)聽聊天室并刷新其他客戶的聊天人名list
			   this.stop();                                   
		   }
	   }
	}
  }  //end of class Client

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频在线观看| 亚洲女人的天堂| 国产精品免费丝袜| 亚洲午夜av在线| 成人激情免费网站| 欧美成人免费网站| 一区二区三区日韩欧美精品 | 精品国产亚洲在线| 一区二区三区中文在线观看| 精品亚洲aⅴ乱码一区二区三区| 色综合网站在线| 久久久99精品久久| 久久99国产精品尤物| 777a∨成人精品桃花网| 亚洲精品免费在线观看| 成年人午夜久久久| 中文字幕二三区不卡| 精品一区二区三区在线播放 | 亚洲国产成人av好男人在线观看| 国产剧情一区在线| 2023国产精品自拍| 久久99精品久久久久久| 欧美一级一级性生活免费录像| 亚洲已满18点击进入久久| 色系网站成人免费| 亚洲日本va在线观看| 91在线观看免费视频| 中文字幕一区不卡| 色屁屁一区二区| 亚洲精品视频一区二区| 91成人在线免费观看| 一区二区三区在线观看视频| 在线一区二区视频| 亚洲最新视频在线观看| 欧美日本不卡视频| 午夜欧美在线一二页| 欧美一区二区成人6969| 美女视频网站黄色亚洲| 精品精品国产高清一毛片一天堂| 久久精品99国产精品日本| 日韩久久免费av| 国产成人av一区| 亚洲少妇30p| 在线观看不卡视频| 天堂一区二区在线| 26uuu色噜噜精品一区| 国产99久久久久久免费看农村| 久久久久一区二区三区四区| 懂色av中文一区二区三区 | 亚洲午夜电影在线观看| 欧美日韩精品是欧美日韩精品| 亚洲国产精品久久久男人的天堂| 欧美男男青年gay1069videost| 蜜桃精品视频在线| 国产丝袜欧美中文另类| 色88888久久久久久影院野外| 亚洲风情在线资源站| 欧美一区二区三区四区视频| 国产麻豆精品95视频| 综合久久久久综合| 7777精品伊人久久久大香线蕉的 | 亚洲精品一区二区在线观看| 国产福利一区二区| 亚洲激情网站免费观看| 欧美一级专区免费大片| 99久久精品免费观看| 婷婷开心激情综合| 日本一二三不卡| 欧美日韩日本视频| 国产69精品久久久久毛片| 亚洲最色的网站| 337p粉嫩大胆噜噜噜噜噜91av| 色欲综合视频天天天| 麻豆成人免费电影| 一区二区三区免费在线观看| 欧美成人午夜电影| 欧美在线高清视频| 成人久久18免费网站麻豆| 日韩中文字幕麻豆| 亚洲色图制服诱惑| 欧美极品美女视频| 精品日韩99亚洲| 欧美亚男人的天堂| 成人免费毛片a| 国产伦精一区二区三区| 日韩国产精品久久久久久亚洲| 亚洲国产高清不卡| 26uuuu精品一区二区| 欧美男男青年gay1069videost| www.亚洲激情.com| 狠狠色丁香婷婷综合久久片| 亚洲高清免费一级二级三级| 亚洲欧洲精品天堂一级| 久久久亚洲综合| 日韩欧美在线1卡| 欧美日韩激情在线| 日本黄色一区二区| 99久久国产综合精品女不卡| 国内外成人在线| 久久精品国产免费看久久精品| 亚洲v精品v日韩v欧美v专区| 亚洲三级免费电影| 中文字幕在线不卡一区| 国产欧美综合在线| 国产三级一区二区| 久久久久久久综合色一本| 精品少妇一区二区三区日产乱码 | 久久99国产乱子伦精品免费| 午夜精品视频在线观看| 洋洋av久久久久久久一区| 亚洲免费观看在线视频| 亚洲欧洲成人精品av97| 成人免费一区二区三区在线观看| 国产亚洲欧美中文| 国产蜜臀97一区二区三区| 国产丝袜美腿一区二区三区| 国产午夜亚洲精品理论片色戒| 久久亚洲一级片| 中文字幕乱码一区二区免费| 国产精品毛片久久久久久久| 国产精品久久久久久久久免费相片| 国产欧美日韩久久| 中文字幕一区二区5566日韩| 亚洲欧美一区二区三区久本道91| 亚洲欧美日本韩国| 亚洲综合色成人| 日本伊人精品一区二区三区观看方式| 日韩高清欧美激情| 久久成人免费电影| 成人美女在线观看| 91传媒视频在线播放| 91精品国产麻豆| 久久久久久亚洲综合| 日韩久久一区二区| 亚洲成人av免费| 国产最新精品精品你懂的| 成人精品鲁一区一区二区| 色丁香久综合在线久综合在线观看| 91国产免费看| 精品国偷自产国产一区| 亚洲区小说区图片区qvod| 天使萌一区二区三区免费观看| 免费看欧美美女黄的网站| 国产·精品毛片| 欧美吞精做爰啪啪高潮| 精品国产一区二区三区久久久蜜月| 中文字幕成人网| 亚洲小说春色综合另类电影| 久久精品久久久精品美女| eeuss国产一区二区三区| 欧美日韩中字一区| 久久久精品综合| 一区二区欧美视频| 国产毛片精品国产一区二区三区| 91啪九色porn原创视频在线观看| 7777精品伊人久久久大香线蕉完整版| 国产午夜三级一区二区三| 亚洲一区二区av在线| 国产成人午夜片在线观看高清观看| 日本韩国一区二区| 国产欧美日韩中文久久| 丝袜诱惑亚洲看片| 91小视频免费看| 久久久精品欧美丰满| 偷窥国产亚洲免费视频| 成人免费视频caoporn| 777色狠狠一区二区三区| 亚洲欧洲中文日韩久久av乱码| 精久久久久久久久久久| 欧美写真视频网站| 国产精品欧美久久久久一区二区| 日本aⅴ精品一区二区三区| 99在线精品免费| 国产欧美一区二区三区鸳鸯浴| 亚洲成人1区2区| 91黄视频在线| 国产精品毛片无遮挡高清| 国产乱子伦视频一区二区三区| 欧美狂野另类xxxxoooo| 亚洲人成伊人成综合网小说| 国产传媒欧美日韩成人| 日韩免费高清视频| 日本不卡123| 欧美精品一二三四| 亚洲一区自拍偷拍| 在线观看www91| 日韩码欧中文字| av在线播放不卡| 国产日韩欧美制服另类| 国产米奇在线777精品观看| 日韩一区二区免费在线观看| 午夜精品在线视频一区| 欧美日韩国产一级二级| 亚洲在线视频免费观看| 欧美亚洲动漫另类| 亚洲激情图片小说视频| 欧美在线不卡一区| 亚洲国产成人porn| 91精品国产色综合久久不卡电影 | 成人综合在线观看|