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

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

?? chatserver.java

?? Java各種網(wǎng)絡(luò)代碼
?? JAVA
字號:
package chatserver;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;import java.util.*;/** * Title:        服務(wù)器端服務(wù)程序 * Description:  利用Socket建立聊天室服務(wù)器端服務(wù)程序。 * Copyright:    Copyright (c) 2002 * Company:      中國農(nóng)業(yè)大學(xué)計算機系 * @author 彭波 * @version 1.0 */	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向量數(shù)組存儲連接客戶變量	  static ServerSocket server=null;					// 建立服務(wù)器socket	  static int active_connects=0;					// 用來存儲目前連接的客戶數(shù)	  static Socket socket=null;						// 用來存儲一個套接字連接	  public static void main(String[] args) {				// 定義main()方法	    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(8080);				// 使用端口8080初始化服務(wù)器套接字		}		catch(IOException e) {		  System.out.println("Error:"+e);		}		while(true) {		  if(clients.size()<5) {						// 當(dāng)客戶數(shù)小于5個時開始連接		   try {			socket=server.accept();					// 用來存儲連接上的客戶socket			if(socket!=null) {			  System.out.println(socket+"連接");		// 在服務(wù)器控制臺打印客戶連接信息			}		   }		   catch(IOException e) {			System.out.println("Error:"+e);		   }		   int i=0;		   do{		     ClientEchoThread c=new ClientEchoThread(socket);		// 定義并實例化一個ClientEchoThread線程類,對應(yīng)一個客戶連接			clients.addElement(c);			// 加入clients數(shù)組中			  if(checkName(c)) {			// 調(diào)用checkName方法驗證客戶的合法性				 int connum=++chatServer1.active_connects;		// 定義connum來存儲活動連接數(shù)				 String constr="目前有"+connum+"客戶相連";	// 在狀態(tài)欄里顯示連接數(shù)				 chatServer1.statusBar.setText(constr);				ClientEchoThread listdata=(ClientEchoThread)clients.elementAt(i);	// 連接客戶socket信息存儲進listdata數(shù)組				chatServer1.jList1.addItem(listdata.ip+"連接",i);	// 將客戶socket信息寫入list框			     c.start();								// 啟動線程				notifyRoom();					// 用notifyRoom方法來監(jiān)視聊天室連接變化			  }			  else {									// 客戶名字不合法			    c.ps.println("TAKEN");			    disconnect(c);			  }			  i++;			  break;			}			while(i<clients.size());		  }		  else{										// 客戶數(shù)組超過了5個			try{Thread.sleep(200);}			catch(InterruptedException e) {}		  }		}			// end of while	  }				// end of main method	  public chatServer(){									// chatServer類構(gòu)造器用來初始化	    enableEvents(AWTEvent.WINDOW_EVENT_MASK);	    try {	      jbInit();	    }	    catch(Exception e) {	      e.printStackTrace();	    }	  }	  private void jbInit() throws Exception  {	    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	  public void jMenuFileExit_actionPerformed(ActionEvent e) {		// 退出菜單方法		sendClients(new StringBuffer("QUIT"));					// 向客戶端發(fā)送斷開連接信息		closeAll();										// 調(diào)用closeAll方法關(guān)閉所有連接		System.exit(0);	  }          public void jMenuHelpAbout_actionPerformed(ActionEvent e) {            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();          }	  protected void processWindowEvent(WindowEvent e) {			// 關(guān)閉服務(wù)器程序要進行的操作	    super.processWindowEvent(e);	    if (e.getID() == WindowEvent.WINDOW_CLOSING) {	      jMenuFileExit_actionPerformed(null);	    }	  }	  public static void notifyRoom(){		// 監(jiān)視連接信息,刷新客戶數(shù)組并刷新客戶端用戶列表信息		StringBuffer people=new StringBuffer("PEOPLE");		for(int i=0;i<clients.size();i++){			ClientEchoThread c=(ClientEchoThread)clients.elementAt(i);			people.append(":"+c.name);		}		sendClients(people);							// 用sendClients方法向客戶端發(fā)送信息	  }	  public static synchronized void sendClients(StringBuffer msg) {	// 向每個連接的客戶端發(fā)送信息		for(int i=0;i<clients.size();i++) {			ClientEchoThread c=(ClientEchoThread)clients.elementAt(i);			c.send(msg);		}	  }	  public static void closeAll(){					// 關(guān)閉所有連接信息	     while(clients.size()>0) {					// 遍歷clients數(shù)組刪除所有連接客戶信息		   ClientEchoThread c=(ClientEchoThread)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(ClientEchoThread newclient) {	// 檢查連接客戶的socket信息是否合法	     for(int i=0;i<clients.size();i++) {		  ClientEchoThread c=(ClientEchoThread)clients.elementAt(i);		  if((c!=newclient)&&c.equals(newclient.name))			 return false;		}		return(true);	  }			// end of checkName method	  public static synchronized void disconnect(ClientEchoThread c) {	// 斷開單個客戶方法	     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 ClientEchoThread extends Thread {						// 定義ClientEchoThread線程類	  Socket socket;								// 存儲一個連接客戶的socket信息	  String name;								// 存儲客戶的連接姓名	  String ip;								// 存儲客戶的ip信息	  DataInputStream dis;						// 接收從客戶端發(fā)來的數(shù)據(jù)流	  PrintStream ps;							// 向客戶端發(fā)送信息的打印流	  public void send(StringBuffer msg) {				// 向客戶端發(fā)送信息的方法		ps.println(msg);							// 打印流發(fā)送信息		ps.flush();	  }	  public ClientEchoThread(Socket s) {						// ClientEchoThread線程類的構(gòu)造器		socket=s;		try {		  dis=new DataInputStream(s.getInputStream());	// 存儲客戶socket輸入流,接收發(fā)送的信息		  ps=new PrintStream(s.getOutputStream());		// 存儲客戶socket輸出流,向客戶發(fā)送信息		  String info=dis.readLine();					// 讀取接收的信息		  StringTokenizer stinfo=new StringTokenizer(info,":");	// 用讀取“:”分段字符		  String head=stinfo.nextToken();				// 存儲關(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);					// 在服務(wù)器控制臺打印頭信息	     }	     catch(IOException e) {	       System.out.println("Error:"+e);	     }	  }		// end of ClientEchoThread constrator	  public void run(){							// 定義線程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)聽聊天室并刷新其他客戶聊天人名列表			this.stop();		  }		}	  }	}		// end of class ClientEchoThread

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美浪妇xxxx高跟鞋交| 92精品国产成人观看免费| 精品国产91亚洲一区二区三区婷婷| 麻豆国产一区二区| 亚洲精品少妇30p| 久久精品亚洲精品国产欧美kt∨| 色狠狠桃花综合| 国产精品一区二区在线观看不卡| 亚洲欧美日韩一区| 2023国产精品自拍| 制服丝袜亚洲网站| 一本久久综合亚洲鲁鲁五月天| 欧美a一区二区| 午夜久久久影院| 亚洲同性同志一二三专区| 精品国产a毛片| 91超碰这里只有精品国产| 91丨九色丨黑人外教| 韩国欧美国产一区| 久久99精品国产麻豆不卡| 国产老肥熟一区二区三区| 国产精品99久久久久| 色综合久久88色综合天天6| 精品视频资源站| 久久你懂得1024| 亚洲黄一区二区三区| 精品国产一区二区三区不卡| 国产成人精品影视| 欧美日韩另类一区| 国产精品久久久一本精品| 日韩影院在线观看| 色菇凉天天综合网| 极品美女销魂一区二区三区免费| 亚洲成人你懂的| 亚洲黄色片在线观看| 国产夜色精品一区二区av| 欧美xxxxxxxx| 亚洲午夜国产一区99re久久| 国产高清成人在线| 欧美成人高清电影在线| 亚洲午夜精品网| 色av成人天堂桃色av| 中文字幕欧美日本乱码一线二线| 黑人精品欧美一区二区蜜桃| 欧美美女黄视频| 日韩专区欧美专区| 欧美午夜精品免费| 亚洲一区二区欧美日韩 | 久久欧美中文字幕| 日本不卡123| 欧美成人一区二区三区片免费| 视频一区视频二区中文字幕| 欧美三级三级三级| 婷婷开心久久网| 色国产精品一区在线观看| 日韩久久一区二区| 国产亚洲欧美一区在线观看| 国产农村妇女毛片精品久久麻豆 | 国产精品毛片大码女人| 亚洲国产精品ⅴa在线观看| 久久久久国产精品人| 一区二区三区四区蜜桃| 国内成人免费视频| 99久久精品国产一区二区三区| 久久久久国产精品麻豆| 亚洲九九爱视频| 亚洲美女偷拍久久| 国产一区二区三区在线观看免费| 欧美三级中文字| 日韩免费电影一区| 欧美主播一区二区三区美女| 日韩三级中文字幕| 麻豆精品视频在线观看视频| 欧美一区二区三区成人| 91麻豆免费看片| 欧洲另类一二三四区| 欧美在线观看视频一区二区| 91小视频免费看| 精品99999| 亚洲美女屁股眼交3| 极品少妇xxxx偷拍精品少妇| 7777精品伊人久久久大香线蕉 | 欧美午夜在线观看| 国产乱一区二区| 亚洲在线观看免费视频| 欧美成人video| 在线精品视频小说1| 国产精品一区二区视频| 午夜精品一区二区三区免费视频| 欧美极品另类videosde| 欧美一区二区视频观看视频| 91免费视频大全| 成人a免费在线看| 国产精品综合视频| 精品制服美女久久| 蜜臀av一区二区在线免费观看| 亚洲精品乱码久久久久久久久| 国产午夜亚洲精品羞羞网站| 欧美大白屁股肥臀xxxxxx| 国产一区二区三区蝌蚪| 久久精品人人做人人爽人人| 成人av手机在线观看| 天天色天天操综合| 亚洲欧美一区二区在线观看| 7777精品久久久大香线蕉| 波多野结衣亚洲| 韩国精品主播一区二区在线观看| 一区二区三区国产豹纹内裤在线| 国产精品久久久久7777按摩| 欧美日韩一区二区不卡| 亚洲国产精品久久人人爱| 在线观看不卡一区| 国内精品久久久久影院一蜜桃| 欧美大片在线观看一区二区| 久久精品99国产国产精| 国产精品拍天天在线| 91香蕉视频黄| 日韩精品电影在线观看| 亚洲伦理在线精品| 国产三级精品视频| 国产亚洲婷婷免费| 日韩精品在线看片z| 日韩一卡二卡三卡国产欧美| 欧美偷拍一区二区| 日本高清视频一区二区| 99久久精品99国产精品| 成人国产精品免费观看| 国产91在线|亚洲| av电影天堂一区二区在线| 粉嫩13p一区二区三区| 成人免费va视频| 色网站国产精品| 欧美天堂一区二区三区| 日韩欧美一区电影| 日韩欧美成人一区二区| 国产欧美精品一区二区色综合朱莉| 久久精品视频免费观看| 亚洲欧美日韩一区| 日韩中文字幕区一区有砖一区| 精品无码三级在线观看视频| 粗大黑人巨茎大战欧美成人| 一本一道久久a久久精品| 欧美日韩一区久久| 日韩欧美国产不卡| 欧洲亚洲国产日韩| 成人黄色av电影| 另类中文字幕网| 亚洲一区国产视频| 中文字幕一区在线观看视频| 亚洲精品成人少妇| 久久天天做天天爱综合色| 久久久美女毛片| 亚洲综合色丁香婷婷六月图片| 日韩电影在线免费观看| 成人高清免费在线播放| 欧美三级资源在线| 国产日本欧美一区二区| 91精品免费在线观看| 色偷偷久久一区二区三区| 欧美日韩亚洲综合一区| 成人久久视频在线观看| 欧美色倩网站大全免费| 欧美高清在线视频| 国产三级久久久| **性色生活片久久毛片| 亚洲色欲色欲www| 极品瑜伽女神91| 欧美高清视频一二三区| 亚洲最色的网站| 国产成人日日夜夜| 日韩一二三区视频| 夜夜爽夜夜爽精品视频| 国产一区二区美女| 精品欧美乱码久久久久久1区2区| 亚洲国产综合人成综合网站| thepron国产精品| 国产精品你懂的在线欣赏| 国产福利91精品一区二区三区| 日韩精品综合一本久道在线视频| 日韩经典中文字幕一区| 日韩一区二区三区精品视频 | 亚洲成人动漫在线观看| 在线免费不卡视频| 亚洲va欧美va人人爽| 在线播放中文一区| 久久精品国产一区二区| 欧美大肚乱孕交hd孕妇| 国产99久久久国产精品潘金网站| 久久一夜天堂av一区二区三区| 国产精品一区三区| 国产精品无遮挡| 色婷婷久久综合| 免费高清在线一区| 久久精品一区四区| 色综合咪咪久久| 亚洲午夜激情av| 久久尤物电影视频在线观看| 国产精品一区不卡| 亚洲综合色噜噜狠狠| 国产亚洲综合在线|