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

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

?? comutil.java

?? 瘋狂Java講義_源碼(含Java設計模式CHM
?? JAVA
字號:
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;

/**
 * Description:該類用于網絡通信,它包含了MulticastSocket實例和
 * DatagramSocket實例,分別實現廣播和私聊功能
 *
 * <br/>Copyright (C), 2008-2010, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
//聊天交換信息的工具類
public class ComUtil
{
	//使用常量作為本程序的多點廣播IP地址
	private static final String BROADCAST_IP
		= "230.0.0.1";
	//使用常量作為本程序的多點廣播目的的端口
	//DatagramSocket所用的的端口為該端口-1。
	public static final int BROADCAST_PORT = 30000;
	//定義每個數據報的最大大小為4K
	private static final int DATA_LEN = 4096;
	
	//定義本程序的MulticastSocket實例
	private MulticastSocket socket = null;
	//定義本程序私聊的Socket實例
	private DatagramSocket singleSocket = null;
	//定義廣播的IP地址
	private InetAddress broadcastAddress = null;
	//定義接收網絡數據的字節數組
	byte[] inBuff = new byte[DATA_LEN];
	//以指定字節數組創建準備接受數據的DatagramPacket對象
	private DatagramPacket inPacket = 
		new DatagramPacket(inBuff , inBuff.length);
	//定義一個用于發送的DatagramPacket對象
	private DatagramPacket outPacket = null;
	
	//聊天的主界面
	private LanChat lanTalk;
	//構造器,初始化資源
	public ComUtil(LanChat lanTalk)throws IOException , InterruptedException
	{
		this.lanTalk = lanTalk;
		//創建用于發送、接收數據的MulticastSocket對象
		//因為該MulticastSocket對象需要接收,所以有指定端口
		socket = new MulticastSocket(BROADCAST_PORT);
		//創建私聊用的DatagramSocket對象
		singleSocket = new DatagramSocket(BROADCAST_PORT + 1);
		broadcastAddress = InetAddress.getByName(BROADCAST_IP);
		//將該socket加入指定的多點廣播地址
		socket.joinGroup(broadcastAddress);
		//設置本MulticastSocket發送的數據報被回送到自身
		socket.setLoopbackMode(false);
		//初始化發送用的DatagramSocket,它包含一個長度為0的字節數組
		outPacket = new DatagramPacket(new byte[0] , 0 ,
			broadcastAddress , BROADCAST_PORT);
		//啟動兩個讀取網絡數據的線程
		new ReadBroad().start();
 		Thread.sleep(1);
		new ReadSingle().start();
	}
	//廣播消息的工具方法
	public void broadCast(String msg)
	{
		try
		{
			//將msg字符串轉換字節數組
			byte[] buff = msg.getBytes();
			//設置發送用的DatagramPacket里的字節數據
			outPacket.setData(buff);
			//發送數據報
			socket.send(outPacket);
		}
		//捕捉異常
		catch (IOException ex)
		{
			ex.printStackTrace();
			if (socket != null)
			{
				//關閉該Socket對象
				socket.close();
			}
			JOptionPane.showMessageDialog(null, 
				"發送信息異常,請確認30000端口空閑,且網絡連接正常!"
				, "網絡異常", JOptionPane.ERROR_MESSAGE);
			System.exit(1);
		}
	}
	//定義向單獨用戶發送消息的方法
	public void sendSingle(String msg , SocketAddress dest)
	{
		try
		{
			//將msg字符串轉換字節數組
			byte[] buff = msg.getBytes();
			DatagramPacket packet = new DatagramPacket(
				buff , buff.length , dest);
			singleSocket.send(packet);
		}
		//捕捉異常
		catch (IOException ex)
		{
			ex.printStackTrace();
			if (singleSocket != null)
			{
				//關閉該Socket對象
				singleSocket.close();
			}
			JOptionPane.showMessageDialog(null, 
				"發送信息異常,請確認30001端口空閑,且網絡連接正常!"
				, "網絡異常", JOptionPane.ERROR_MESSAGE);
			System.exit(1);
		}
	}
	//不斷從DatagramSocket中讀取數據的線程
	class ReadSingle extends Thread
	{
		//定義接收網絡數據的字節數組
		byte[] singleBuff = new byte[DATA_LEN];
		private DatagramPacket singlePacket = 
			new DatagramPacket(singleBuff , singleBuff.length);
		public void run()
		{
			while (true)
			{
				try
				{
					//讀取Socket中的數據,讀到的數據放在inPacket所封裝的字節數組里。
					singleSocket.receive(singlePacket);
					//處理讀到的信息
					lanTalk.processMsg(singlePacket , true);
				}
				//捕捉異常
				catch (IOException ex)
				{
					ex.printStackTrace();
					if (singleSocket != null)
					{
						//關閉該Socket對象
						singleSocket.close();
					}
					JOptionPane.showMessageDialog(null,
						"接收信息異常,請確認30001端口空閑,且網絡連接正常!"
						, "網絡異常", JOptionPane.ERROR_MESSAGE);
					System.exit(1);
				}				
			}
		}
	}
	//持續讀取MulticastSocket的線程
	class ReadBroad extends Thread
	{
		public void run()
		{
			while (true)
			{
				try
				{
					//讀取Socket中的數據,讀到的數據放在inPacket所封裝的字節數組里。
					socket.receive(inPacket);
					//打印輸出從socket中讀取的內容
					String msg = new String(inBuff , 0 , inPacket.getLength());
					//讀到的內容是在線信息
					if (msg.startsWith(YeekuProtocol.PRESENCE)
						&& msg.endsWith(YeekuProtocol.PRESENCE))
					{
						String userMsg = msg.substring(2 , msg.length() - 2);
						String[] userInfo = userMsg.split(YeekuProtocol.SPLITTER);
						UserInfo user = new UserInfo(userInfo[1] , userInfo[0] , 
							inPacket.getSocketAddress(), 0);
						//控制是否需要添加該用戶的旗標
						boolean addFlag = true;
						ArrayList<Integer> delList = new ArrayList<Integer>();
						//遍歷系統中已有的所有用戶,該循環必須循環完成
						for (int i = 1 ; i < lanTalk.getUserNum() ; i++ )
						{
							UserInfo current = lanTalk.getUser(i);
							//將所有用戶失去聯系的次數加1
							current.setLost(current.getLost() + 1);
							//如果該信息由指定用戶發送過來
							if (current.equals(user))
							{
								current.setLost(0);
								//設置該用戶無需添加
								addFlag = false;
							}
							if (current.getLost() > 2)
							{
								delList.add(i);
							}
						}
						//刪除delList中的所有索引對應的用戶
						for (int i = 0; i < delList.size() ; i++)
						{
							lanTalk.removeUser(delList.get(i));
						}
						if (addFlag)
						{
							//添加新用戶
							lanTalk.addUser(user);
						}						
					}
					//讀到的內容是公聊信息
					else
					{
						//處理讀到的信息
						lanTalk.processMsg(inPacket , false);
					}
				}
				//捕捉異常
				catch (IOException ex)
				{
					ex.printStackTrace();
					if (socket != null)
					{
						//關閉該Socket對象
						socket.close();
					}
					JOptionPane.showMessageDialog(null, 
						"接收信息異常,請確認30000端口空閑,且網絡連接正常!"
						, "網絡異常", JOptionPane.ERROR_MESSAGE);
					System.exit(1);
				}
			}
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久浪潮| 欧美日韩精品一区二区天天拍小说 | 亚洲人成精品久久久久| 欧美日韩精品三区| 国产**成人网毛片九色| 亚洲成人激情综合网| 日本一区二区视频在线观看| 欧美巨大另类极品videosbest| 国产91精品在线观看| 日韩av高清在线观看| 亚洲精品欧美综合四区| 久久精品一区四区| 在线不卡欧美精品一区二区三区| 菠萝蜜视频在线观看一区| 久久精品国产亚洲5555| 亚洲成人高清在线| 亚洲少妇30p| 国产欧美日韩三区| 精品999久久久| 欧美一区国产二区| 欧美日产国产精品| 欧洲激情一区二区| 91在线观看地址| 菠萝蜜视频在线观看一区| 精品一区免费av| 日本中文一区二区三区| 亚洲成人午夜电影| 亚洲成人综合在线| 亚洲电影一区二区| 亚洲小少妇裸体bbw| 一区二区三区在线观看欧美| 中文字幕中文乱码欧美一区二区| 久久久91精品国产一区二区三区| 日韩视频中午一区| 欧美一级在线免费| 欧美一区二区三区爱爱| 91精品国产综合久久久久| 欧美日韩日本视频| 欧美日韩大陆一区二区| 欧美精品在线观看播放| 欧美日韩亚洲综合一区二区三区| 日本韩国欧美三级| 欧美最新大片在线看| 91美女在线视频| 欧美性视频一区二区三区| 91久久国产综合久久| 欧美日韩视频专区在线播放| 欧美肥大bbwbbw高潮| 日韩一级完整毛片| 精品欧美乱码久久久久久 | 91黄色免费观看| 在线观看视频91| 在线观看网站黄不卡| 555夜色666亚洲国产免| 日韩久久久久久| 久久久久久亚洲综合| 国产精品女上位| 亚洲精品视频一区| 首页国产丝袜综合| 精品亚洲欧美一区| 成人毛片老司机大片| 91蜜桃网址入口| 欧美美女黄视频| 26uuu精品一区二区| 国产欧美一区二区精品久导航| 国产精品伦理在线| 亚洲国产成人91porn| 奇米888四色在线精品| 国产高清视频一区| 91亚洲精品久久久蜜桃网站| 欧美日韩国产免费| 26uuu色噜噜精品一区| 亚洲男同1069视频| 免费久久99精品国产| 国产成人精品aa毛片| 色又黄又爽网站www久久| 欧美一区二区三区电影| 国产精品久久免费看| 亚洲不卡av一区二区三区| 久久99热狠狠色一区二区| av福利精品导航| 91精品国产91热久久久做人人| 久久九九国产精品| 亚洲综合小说图片| 国产很黄免费观看久久| 欧美日韩一区二区三区四区| 久久久亚洲精品石原莉奈| 一区二区三区在线观看视频| 国产呦精品一区二区三区网站| 色综合久久综合| 久久久久久夜精品精品免费| 亚洲高清免费在线| 成人午夜视频在线观看| 欧美一级二级三级蜜桃| 最新国产成人在线观看| 免费成人深夜小野草| 91污片在线观看| 久久网这里都是精品| 亚洲1区2区3区视频| 成人免费视频视频| 日韩精品资源二区在线| 夜夜精品视频一区二区 | 麻豆视频一区二区| 一本久道久久综合中文字幕| 久久人人97超碰com| 亚洲123区在线观看| 处破女av一区二区| 欧美不卡一二三| 婷婷亚洲久悠悠色悠在线播放| 99re热视频精品| 久久在线观看免费| 奇米影视一区二区三区小说| 欧美日韩在线亚洲一区蜜芽| 18欧美乱大交hd1984| 国产福利一区二区三区在线视频| 欧美一区二区三区色| 亚洲大片免费看| 在线观看日韩国产| 亚洲视频一二三区| 国产91精品精华液一区二区三区 | 国产欧美视频在线观看| 日韩精品亚洲专区| 色婷婷国产精品综合在线观看| 久久久高清一区二区三区| 日韩精品五月天| 欧美日韩一区二区不卡| 亚洲人成网站影音先锋播放| 成人三级伦理片| 国产精品国产馆在线真实露脸| 国产精品一品二品| 日韩手机在线导航| 麻豆91免费看| 欧美一区二区三区四区久久| 午夜精品爽啪视频| 欧美日韩高清一区二区| 香蕉久久一区二区不卡无毒影院 | 色综合色综合色综合 | 一区二区三区在线观看国产| 91免费观看视频在线| 亚洲欧美国产三级| 色哦色哦哦色天天综合| 亚洲毛片av在线| 91极品视觉盛宴| 一区二区视频在线| 色网综合在线观看| 亚洲一区二区三区精品在线| 欧美视频在线不卡| 偷拍一区二区三区| 精品国产乱码久久久久久久| 国产在线播放一区三区四| 国产精品午夜在线| fc2成人免费人成在线观看播放 | 亚洲精品国产视频| 欧美视频自拍偷拍| 日本不卡在线视频| 精品不卡在线视频| 国产99一区视频免费| 亚洲色图.com| 51精品国自产在线| 国产精品亚洲视频| 亚洲色图视频网| 56国语精品自产拍在线观看| 精品在线播放免费| 成人免费小视频| 欧美日韩国产经典色站一区二区三区| 免费成人深夜小野草| 国产精品毛片无遮挡高清| 在线免费不卡电影| 久久国产精品72免费观看| 亚洲国产高清aⅴ视频| 一本久久a久久精品亚洲| 美女爽到高潮91| 国产精品国产三级国产aⅴ中文| 日本黄色一区二区| 精品中文av资源站在线观看| 国产精品久久久久一区二区三区共| 欧美亚洲一区三区| 精品在线播放免费| 一级做a爱片久久| 精品99一区二区三区| 欧美伊人久久久久久午夜久久久久| 蜜桃视频在线观看一区| 国产精品成人在线观看| 欧美三级中文字幕在线观看| 国产一区不卡在线| 亚洲成人自拍一区| 国产精品久久久久aaaa樱花| 制服丝袜亚洲网站| 不卡视频一二三| 久久国产精品99久久人人澡| 樱花草国产18久久久久| 精品99一区二区| 欧美精品少妇一区二区三区| 成人少妇影院yyyy| 精品制服美女久久| 午夜精品影院在线观看| 国产精品成人在线观看| www日韩大片| 911精品产国品一二三产区| 99riav一区二区三区|