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

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

?? socketmanager.java

?? 游戲說明
?? JAVA
字號:
package com.tianxia.qipai.model.socket;


import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.util.Timer;

import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.DatagramConnection;
import com.tianxia.qipai.model.util.*;

public class SocketManager extends Thread {    //socket連接的維護實現(xiàn)
	private String  ipstring;
	private String  recpacket;
	private static  SocketInterface socketinterface;
	long now,recent,datarecent,gcrecent;   //now 表示當前時間,recent表示最近一次socket連接的時間
	private boolean datasendflag;
	private static SocketManager instance;
	private DatagramConnection dc;
	private boolean Ifthreadstart;    //線程啟動標志
	private boolean connectflag;
	private boolean toconnectflag;
	private boolean havesenddata;
	private boolean switchstate;  //是否正在切換服務器
	private int currcount;  //連接維護調用次數(shù)
	private boolean runflag = true;
	private String senddata;
	private final static int MAXCOUNT = 3;//socket最大連續(xù)重連失敗次數(shù)
	private int reconnectcount;  //socket重連次數(shù)
	private boolean reconnectflag;//socket重連標志
	private String buffdata ="";  //用于斷線緩存
	public final static String IRECONNECT = "998";  //與服務器重新連接成功
	public final static String ITORECONNECT = "997";//與服務器斷開,正重新連接
	public final static String IDISCONNECT = "996";//無法連接服務器
	private static int gap;
	private static int datagap;
    //監(jiān)測運行時,以便及時運行垃圾回收
	private Runtime rt = null;
	private boolean gcflag = false;  //是否要肩負起垃圾收集工作
	private Timer timer;
	private ConnectKeepTimer connecttimer;
	//互斥鎖
	private byte[] sendlock = new byte[0];   //發(fā)送函數(shù)互斥
	private byte[] disconnectlock = new byte[0]; 
	private byte[] connectlock = new byte[0]; 
	private byte[] dispendatalock = new byte[0];
	private byte[] interfacelock = new byte[0];
	
	public SocketManager(boolean gcflag) {
		super();
		this.gcflag = gcflag;
	}
	
	public void init(SocketInterface socketinterface,String ipstring){
		this.socketinterface = socketinterface;
		this.ipstring = ipstring;
		connectflag = false;
		Ifthreadstart = false;
		reconnectflag = false;
		toconnectflag = false;
		havesenddata = false;
		switchstate = false;
		datasendflag = false;
		currcount=0;
		
		timer = new Timer();
		connecttimer = new ConnectKeepTimer(this);
		rt = Runtime.getRuntime();
		this.start();
	}
	
	
	public void resetipstring(String ipstring){   //重新設置連接的ip參數(shù)
		if(this.ipstring.equals(ipstring))
			return;
		switchstate = true;
		this.ipstring = ipstring;
		havesenddata = false;
		datasendflag = false;
		sendpacket(UniversalDefine.CHECKDATABAG,true);
		toconnectflag = false;
		connectflag = false;
		buffdata = "";
		
	}
	
	public void resetSocInterface(SocketInterface socketinterface){    //重新設置調用這個socket的父級句柄
		synchronized(interfacelock){
			this.socketinterface = socketinterface;
			switchstate = false;
		}
	}

	public static synchronized SocketManager getInstance(){
		if(instance == null){
			instance = new SocketManager(true);
		}
			return instance;
	}
	

	public void run(){	
		
		while(!toconnectflag)
		{
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		if (connect()) {
			recent = System.currentTimeMillis();
			gcrecent = recent;
			now = recent;
			gap = 0;
			Thread t = new Thread(connecttimer);
			t.start();
			Datagram dg=null;
			while (runflag) {
				if(!switchstate){   //處在同一服務器
					if (havesenddata){  //連接發(fā)送的第一個數(shù)據(jù)包  
						sendpacket(senddata,true);
						havesenddata = false;
					}
					if (connectflag) {
						recpacket ="";
						try {
							
							 dg = dc.newDatagram(2048);
							 dc.receive(dg);
							 recpacket = new String(dg.getData(),0,dg.getLength(),"UTF-8");
						}catch(EOFException eofe){
							System.out.println(recpacket);
							eofe.printStackTrace();
						}catch (IOException oe) {
							dg.reset();
							dg = null;
							oe.printStackTrace();
						} catch(Exception e){
							dg.reset();
							dg = null;
							e.printStackTrace();
						}
						
						if(dg!=null){
							gap =0;
							dg.reset();
							dg = null;
						}
						
						if(!recpacket.equals("")){
							recent = System.currentTimeMillis();
							datatofather();
						}
						
					}else{
						while(!toconnectflag)
						{
							try {
								Thread.sleep(100);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
						}
						if(!connect()) {
							recpacket = "000|"+IDISCONNECT;  //產生無法連接服務器事件
							datatofather();
							break;
						}else{
							gap =0;
							havesenddata = true;
						}
					}
				}else{
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
				
			}
			
		}else{
			recpacket = "000|"+IDISCONNECT;  //無法連接服務器
			datatofather();
		}
				
				
	}
		
		
	//斷開連接
	private synchronized void disconnect(){
		synchronized(disconnectlock){
			try {
				if(dc != null){
						dc.close();
					}
					
				} catch (IOException e) {
					// TODO 自動生成 catch 塊
					e.printStackTrace();
				}
				dc = null;
				connectflag = false;
		}
			
	}
	
	private void setsendpacket(String packetdata){
		havesenddata = true;
		toconnectflag = true;
		senddata = null;
		senddata = packetdata;
		
	}
	
	// 向服務器發(fā)送數(shù)據(jù)
	public  synchronized  void  sendpacket(String packetdata,boolean ifbuff) {
		synchronized(sendlock){
			System.out.println(packetdata);
			if(ifbuff){  //是否將數(shù)據(jù)緩存
				buffdata = null;
				buffdata = packetdata;
				if(!toconnectflag){
					setsendpacket(packetdata);
				}else{
					datasendflag = true;
					datagap=0;
				}
			}
			if (connectflag){
				try {
					byte[] bytes = packetdata.getBytes("UTF-8");
				//	byte[] bytes = packetdata.getBytes();
					dc.send(dc.newDatagram(bytes, bytes.length));
				} catch (Exception oe) {
					disconnect();
					System.out.println("socket 連接已斷開");
					return;
				}
			}
			packetdata = null;
			
		}
	}

	
	//udp連接維護,每1秒種調用一次
	public void ConnectKeep(){
		if(gap >=2*60){ //超過2分鐘沒接收到消息
			disconnect();   //斷開連接
			recpacket = "000|"+ITORECONNECT;   //產生與服務器斷開連接事件
			datatofather();
			if(connect()){
				recpacket = "000|"+IRECONNECT;   //產生服務器重連成功事件
				sendpacket(buffdata,true);
				datatofather();
			}else{
				recpacket = "000|"+IDISCONNECT;  //產生無法連接服務器事件
				datatofather();
			}
			gap = 0;
			
		}
		System.out.println("freeMory2:  "+String.valueOf(rt.freeMemory()));
		System.out.println("totalMory2:  "+String.valueOf(rt.totalMemory()));
		if(gcflag){  //判斷是否有垃圾回收任務,且上次調用會收后超過3秒
			//在性能過耗(可用內存不到當前內存總量的2/5時),進行垃圾回收GC
			System.out.println("freeMory:  "+String.valueOf(rt.freeMemory()));
			System.out.println("totalMory:  "+String.valueOf(rt.totalMemory()));
			if(rt.freeMemory() < (rt.totalMemory() * 2/5)){
	            rt.gc();
	         }
		}
		now = System.currentTimeMillis();
		if(datagap>5){//超過5秒沒接收到業(yè)務響應數(shù)據(jù)
			if(!buffdata.equals("")&&datasendflag)
				this.sendpacket(buffdata,true);
				datagap = 0;
		}
		if(currcount>=30){    ///每30秒發(fā)一次檢測包
			sendpacket(UniversalDefine.CHECKDATABAG,false);
			currcount = 0;
		}
		gap++;
		datagap++;
		currcount++;
		
	}
	
	// 連接服務器
	private synchronized boolean connect() {
		synchronized(connectlock){
			if(!connectflag){
				try {
					disconnect();
					dc = (DatagramConnection) Connector.open(ipstring);
					connectflag = true;
					if(!reconnectflag){
						System.out.println("socket connect successful");
						reconnectflag = true;
					}else{
						System.out.println("socket reconnect successful");
					}
					
			
				} catch (ConnectionNotFoundException cnfe) {
					reconnectcount++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO 自動生成 catch 塊
						e.printStackTrace();
					}
					if(reconnectcount>=MAXCOUNT){
						return false;
					}else{
						return connect();
					}
					
				} catch (IOException ioe) {
					if (!connectflag) {
						ioe.printStackTrace();
						return false;
					}
				} catch (Exception e) {
					e.printStackTrace();
					return false;
				}
				
				
			}
			return true;
		}
	}

	

	
	// 把接收到的數(shù)據(jù)做初步解析后,山選出業(yè)務數(shù)據(jù)分發(fā)給相應的處理模塊
	private synchronized void datatofather() {
		synchronized(dispendatalock){
			System.out.println("Received . :" + recpacket);
			int ifcheck=999;   //檢測包標志999 為檢測包  997/998 表示socket連接已經斷開/連接上 其他 為業(yè)務數(shù)據(jù)包 
			String errcode = "";
			StringTokenizer stringtokenizer = new StringTokenizer(recpacket, UniversalDefine.DIVISION);
			if(stringtokenizer.hasMoreTokens()){
				errcode = stringtokenizer.nextToken();
				if(errcode.equals("000")){
					if (stringtokenizer.hasMoreTokens()) {
						ifcheck = Integer.parseInt(stringtokenizer.nextToken());
					}
					if(ifcheck != 999 && !recpacket.equals("")){//不是檢測包
						datasendflag = false;
						synchronized(interfacelock){
							socketinterface.RecvieData(recpacket);	
						}
					}
				}else if(errcode.equals("001")){  //業(yè)務數(shù)據(jù)發(fā)送成功響應包
					datasendflag = false;
					datagap=0;
				}
			}
			stringtokenizer.setNull();
			stringtokenizer = null;
			errcode = null;
		}
		
		
	}

	// 啟動socketmanager實例線程,并保證socket連接已經建立
	public  void socketthreadstart() {
		if (!Ifthreadstart){
			Ifthreadstart = true;
			this.start();
			while(!connectflag){
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			
		}
	}
	
	
	
		


	
	
	public void setNull(){
		runflag = false;
		socketinterface = null;
		if(timer!=null)
			timer.cancel();
		try {
			dc.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		instance = null;
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图制服诱惑| 国产亚洲欧美色| 一区二区三区在线视频观看58| 国产制服丝袜一区| 久久精品欧美一区二区三区麻豆| 国产69精品久久久久毛片| 国产精品久久久久久久久搜平片 | 亚洲国产精品久久艾草纯爱| 在线日韩一区二区| 日本伊人色综合网| 久久精品亚洲麻豆av一区二区 | 亚洲激情av在线| 欧美日本乱大交xxxxx| 裸体一区二区三区| 国产欧美日韩在线| 欧美午夜精品电影| 美国一区二区三区在线播放| 欧美经典一区二区| 在线免费观看成人短视频| 男人的天堂久久精品| 国产欧美一区二区精品性色超碰| 色婷婷亚洲精品| 久久国产成人午夜av影院| 国产精品久久久久一区二区三区 | 欧美在线免费观看亚洲| 午夜精品福利久久久| 久久精品亚洲麻豆av一区二区| eeuss鲁一区二区三区| 亚洲成人中文在线| 国产精品视频yy9299一区| 欧美日韩免费高清一区色橹橹| 精品一区二区精品| 亚洲女性喷水在线观看一区| 日韩欧美在线1卡| 91啪在线观看| 国产盗摄一区二区三区| 亚洲午夜视频在线观看| 久久久久9999亚洲精品| 欧美日韩激情在线| 91一区二区三区在线观看| 麻豆精品一二三| 亚洲午夜三级在线| 国产精品人人做人人爽人人添| 3d动漫精品啪啪一区二区竹菊| 成人精品在线视频观看| 免费成人小视频| 亚洲国产成人av好男人在线观看| 国产区在线观看成人精品| 欧美电影在线免费观看| 97久久久精品综合88久久| 国产九色精品成人porny | 久久福利资源站| 性欧美疯狂xxxxbbbb| 亚洲欧洲国产日本综合| 久久久久久久久久看片| 日韩欧美激情四射| 91精品国产高清一区二区三区| 9i在线看片成人免费| 国产久卡久卡久卡久卡视频精品| 日本在线不卡一区| 亚洲va欧美va人人爽| 亚洲一区二区三区国产| 亚洲人123区| 亚洲你懂的在线视频| 亚洲欧洲av色图| 国产精品剧情在线亚洲| 国产女主播视频一区二区| 久久影院视频免费| 精品国产乱码久久久久久浪潮| 日韩欧美中文一区| 日韩欧美一级精品久久| 日韩亚洲欧美综合| 欧美一级片在线| 日韩视频免费直播| 欧美大白屁股肥臀xxxxxx| 欧美一区二区三区免费| 日韩一区二区在线观看| 欧美tickling网站挠脚心| 精品国一区二区三区| 久久久久久夜精品精品免费| 精品日韩一区二区三区| 亚洲精品一区二区三区福利| 精品国产乱码久久久久久牛牛 | 国产精品久久久久久久午夜片| 欧美国产精品一区二区| 国产精品久久久久精k8| 一区二区视频免费在线观看| 亚洲精品一二三四区| 一区二区激情小说| 五月综合激情网| 老司机免费视频一区二区三区| 黑人巨大精品欧美一区| 粉嫩欧美一区二区三区高清影视 | 色8久久人人97超碰香蕉987| 91久久线看在观草草青青| 在线观看亚洲精品| 91精品国产乱| 国产欧美日本一区视频| 亚洲欧美日韩在线| 日本在线播放一区二区三区| 久久66热re国产| 成人精品视频网站| 欧美亚洲综合网| 欧美精品一区二区三区视频| 国产欧美一区二区精品久导航| 亚洲欧洲成人精品av97| 视频一区二区欧美| 狠狠色综合色综合网络| 一本色道久久综合亚洲91| 91精品国产91综合久久蜜臀| 亚洲国产精品成人综合| 洋洋成人永久网站入口| 激情五月婷婷综合网| 色激情天天射综合网| 亚洲精品一线二线三线无人区| 国产精品三级av| 天堂影院一区二区| 粉嫩久久99精品久久久久久夜| 欧美色精品在线视频| 国产三级一区二区三区| 亚洲一区二区av在线| 国产精品一区二区果冻传媒| 欧洲亚洲国产日韩| 中文字幕欧美激情| 日韩国产高清在线| 99久久精品免费看| 亚洲精品在线观| 日韩高清欧美激情| 一本色道亚洲精品aⅴ| 精品欧美乱码久久久久久1区2区 | 国产精品久久精品日日| 人人超碰91尤物精品国产| 91麻豆精品在线观看| 日韩小视频在线观看专区| 夜夜嗨av一区二区三区中文字幕| 国产精品系列在线观看| 91精品国产福利| 亚洲综合无码一区二区| 国产老肥熟一区二区三区| 91精品国产免费| 亚洲永久免费视频| 成人黄色电影在线 | 久久久久久久久久久久久女国产乱| 亚洲第一搞黄网站| 国产福利一区在线| 日韩精品专区在线影院观看| 一级日本不卡的影视| 不卡av免费在线观看| 久久久精品国产免大香伊| 久久狠狠亚洲综合| 欧美一区二区精美| 免费视频一区二区| 911精品国产一区二区在线| 一区二区三区四区在线播放 | 91在线小视频| 国产精品白丝在线| 不卡在线视频中文字幕| 欧美激情中文不卡| 国产精品一区一区三区| 久久久久国产精品麻豆ai换脸 | 色婷婷久久综合| 亚洲日本电影在线| 91在线观看视频| 亚洲人成人一区二区在线观看 | 欧美日韩精品一区二区三区| 一级精品视频在线观看宜春院 | 91福利国产精品| 夜夜嗨av一区二区三区中文字幕| 91精品办公室少妇高潮对白| 亚洲精品高清在线观看| 欧美天堂一区二区三区| 亚洲大片免费看| 日韩一区二区电影在线| 久久精品国产网站| 国产欧美一区二区精品性色超碰| 国产91精品在线观看| 亚洲三级视频在线观看| 在线精品视频免费播放| 亚洲成人精品在线观看| 日韩视频免费观看高清完整版在线观看| 婷婷国产在线综合| 精品久久国产字幕高潮| 国产成人在线观看| 日韩美女精品在线| 欧美视频一区二区在线观看| 日韩主播视频在线| 久久久久久久久伊人| 北条麻妃国产九九精品视频| 一区二区三区产品免费精品久久75| 欧美日韩成人一区二区| 奇米精品一区二区三区在线观看| 精品国产精品一区二区夜夜嗨| 国产成人综合在线播放| 亚洲欧美自拍偷拍色图| 在线免费观看一区| 蜜桃久久久久久久| 国产人妖乱国产精品人妖| 欧美最新大片在线看| 蜜桃视频一区二区三区| 综合久久给合久久狠狠狠97色|