⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtavirtualplayertcp.java

📁 是一款国外的网络游戏平台的源码*不是类似浩方那种虚拟局域网技术
💻 JAVA
字号:
/*
 * Created on Jan 26, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.GTADS.proxy;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GTAVirtualPlayerTCP extends Thread {
	public static GTAVirtualPlayerTCP instance;
	private static ServerSocket virtualClientListen;
	private static Socket virtualClientConnection;
	private static Socket virtualGameConnection;
	private int listenPort = 2300;
	private byte[] tcpData = new byte[10000];
	private boolean initial = true;
	private int count = 0;
	
	public static GTAVirtualPlayerTCP getInstance(){
		if (instance == null){
			instance = new GTAVirtualPlayerTCP();
		}
		return instance;
	}
	
	public static void clearInstance(){
		if (instance != null){
			instance.closeAllSockets();
			instance.stop();
			instance = null;
		}
	}
	
	public GTAVirtualPlayerTCP(){
		start();
	}
	
	public void run(){
		try {
			virtualClientListen = new ServerSocket(listenPort);
			virtualClientConnection = virtualClientListen.accept();
			System.out.println("Virtual Player Connection Triggered");
			while (true){
				// Recieve and send data from Virtual Player to real player via proxy
				tcpData = new byte[3000];
								
				DataInputStream din = new DataInputStream(virtualClientConnection.getInputStream());
				int p = din.read(tcpData);
//				count++;
				//if (count == 3){
					//if (!Proxy.matchesString(tcpData,"play)")){
						//continue;
					//}
				//}
				Proxy.displayByte(Proxy.getByteOffset(tcpData,0,p));
				
				Proxy.getInstance().sendTCPHostData(Proxy.getByteOffset(tcpData,0,p));
				System.out.println("Sending data through proxy");
				//virtualClientConnection.close();
			}
		} catch (IOException ioe){
			// TODO: Add correct error
			return;
		}
	}
	
	public void sendTCPDataToGame(byte[] data) throws IOException {
		DataOutputStream dout = new DataOutputStream(virtualClientConnection.getOutputStream());
		dout.write(data);
		System.out.println("Sending data to local game");
	}
	
	public void processVPlayerTCP(byte[] data) throws IOException {
		// When an incoming connection for a player happens
		// Handle it here
		if (virtualGameConnection == null){
			//virtualGameConnection.close();
//			initial = false;
			virtualGameConnection = new Socket(InetAddress.getByName("localhost"), 2301);
		}
		DataOutputStream dout = new DataOutputStream(virtualGameConnection.getOutputStream());
		dout.write(data,0,data.length);
		dout.flush();
	}
	
	private boolean checkInitPlayData(byte[] data) {
		boolean isSuccess = true;
		char[] gameInit = Proxy.gameInitByte;
		
		if (gameInit.length == data.length){
			for (int i = 0; i<gameInit.length; i++){
				if ((byte)gameInit[i] != data[i])
					isSuccess = false;
			}
		}
		return isSuccess;
	}
	
	public void closeAllSockets() {
		try {
		if (virtualClientConnection != null)
			virtualClientConnection.close();
		if (virtualClientListen != null)
			virtualClientListen.close();
		if (virtualGameConnection != null)
			virtualGameConnection.close();
		} catch (IOException ioe){
			return;
		}
	}
	
	public static byte[] readBytes(DataInputStream din) throws IOException{
		byte[] temp = new byte[1000];
		byte[] buffer = new byte[1000];
		int p = 0;
		
		while (din.available() <= 0){
		}
		
		p = din.available();
		
		temp = new byte[p];
		for (int i = 0; i < temp.length;i++){
			
		}
		
		p = din.read(temp);
		din.readByte();
		temp = Proxy.getByteOffset(temp,0,p);
		System.out.println("Length of initial incoming packet: " + temp.length);
		
		while (din.available() > 0){
			p = din.read(buffer);
			temp = Proxy.byteCat(temp, Proxy.getByteOffset(buffer,0,p));
		}
		
		System.out.println("Length of total incoming packet: " + temp.length);
		return temp;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -