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

📄 mtcpc.java

📁 httptunnel.jar httptunnel java 源码
💻 JAVA
字号:
package net.jumperz.app.MTCPC;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import net.jumperz.net.*;
import net.jumperz.gui.*;
import net.jumperz.util.*;

public class MTCPC
implements ComponentListener, DocumentListener, ActionListener
{
//掕悢
private static final String appName = "TCPC";
private static final int minimum_height	= 350;
private static final int minimum_width	= 400;
private static final int DISCONNECTED	= 0;
private static final int CONNECTING	= 1;
private static final int CONNECTED	= 2;

//GUI娭楢
private MSwingUtil GUI_updater;
private JLabel host_label;
private JLabel port_label;
private JTextField host_edit;
private JTextField port_edit;
private JButton connect_button;
private JButton disconnect_button;
private JPanel west_panel;
private JPanel west_north_north_panel;
private JPanel west_north_center_panel;
private JPanel west_north_panel;
private JPanel west_center_panel;
private JPanel west_south_panel;
private JPanel east_panel;
private JScrollPane send_scrollpane;
private JScrollPane log_scrollpane;
private JTextArea send_textarea;
private JTextArea log_textarea;
private JButton send_button;
private MSplitPaneFrame frame;

//僜働僢僩娭楢
private Socket socket;
private InputStream net_input_stream;
private OutputStream net_output_stream;

//僗儗僢僪娭楢
private MThreadPool ThreadPool;
private static final int THREAD_COUNT = 5;

//偦偺懠
private int state = DISCONNECTED;
//---------------------------------------------------------------------
public static void main( String[] args )
{
new MTCPC();
}
//---------------------------------------------------------------------
public MTCPC()
{
ThreadPool = new MThreadPool( THREAD_COUNT );

GUI_updater = new MSwingUtil()
	{
	public void updateSwing()
		{
		updateGUI();
		}
	};

frame = new MSplitPaneFrame( appName );
LayoutManager gridbaglayout = new GridBagLayout();
//LayoutManager flowlayout = new FlowLayout( FlowLayout.LEFT );
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets( 2, 2, 2, 2 );

west_north_panel = new JPanel();

west_north_north_panel = new JPanel();
west_north_north_panel.setLayout( gridbaglayout );
//west_north_north_panel.setBorder( BorderFactory.createLineBorder( Color.red ) );

host_label = new JLabel( "Host:" );
port_label = new JLabel( "Port:" );

host_edit = new JTextField( 15 );
host_edit.getDocument().addDocumentListener( this );

port_edit = new JTextField( 10 );
port_edit.getDocument().addDocumentListener( this );

constraints.gridy = 0;
west_north_north_panel.add( host_label, constraints );
west_north_north_panel.add( host_edit , constraints );

constraints.gridy = 1;
west_north_north_panel.add( port_label, constraints );
west_north_north_panel.add( port_edit , constraints );

west_north_center_panel = new JPanel();
//west_north_center_panel.setBorder( BorderFactory.createLineBorder( Color.blue ) );
west_north_center_panel.setLayout( gridbaglayout );

connect_button = new JButton( "Connect" );
connect_button.setMnemonic( KeyEvent.VK_C );
connect_button.setEnabled( false );
connect_button.setActionCommand( "Connect" );
connect_button.addActionListener( this );

disconnect_button = new JButton( "Disconnect" );
disconnect_button.setMnemonic( KeyEvent.VK_D );
disconnect_button.setEnabled( false );
disconnect_button.setActionCommand( "Disconnect" );
disconnect_button.addActionListener( this );

constraints.gridy = 0;
west_north_center_panel.add( connect_button, constraints );
west_north_center_panel.add( disconnect_button, constraints );

send_textarea = new JTextArea( 5, 20 );
send_textarea.setBorder( BorderFactory.createLoweredBevelBorder( ) );

send_scrollpane = new JScrollPane( send_textarea );

constraints.gridy = 0;
west_center_panel = new JPanel();
west_center_panel.setLayout( new BorderLayout() );
//west_center_panel.setBorder( BorderFactory.createLineBorder( Color.red ) );
west_center_panel.add( send_scrollpane, BorderLayout.CENTER );

west_south_panel = new JPanel();
west_south_panel.setLayout( gridbaglayout );
//west_south_panel.setBorder( BorderFactory.createLineBorder( Color.green ) );

send_button = new JButton( "Send" );
send_button.setMnemonic( KeyEvent.VK_S );
send_button.setEnabled( false );
send_button.setActionCommand( "Send" );
send_button.addActionListener( this );

constraints.gridy = 0;
west_south_panel.add( send_button, constraints );

west_panel = frame.getWestPanel();
west_panel.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
west_panel.setLayout( new BorderLayout() );

west_north_panel.setLayout( new BorderLayout() );
west_north_panel.add( west_north_north_panel, BorderLayout.NORTH );
west_north_panel.add( west_north_center_panel, BorderLayout.CENTER );
west_panel.add( west_north_panel, BorderLayout.NORTH );
west_panel.add( west_center_panel, BorderLayout.CENTER );
west_panel.add( west_south_panel, BorderLayout.SOUTH );

Dimension minimumSize = new Dimension( 240, 350 );
west_panel.setMinimumSize( minimumSize );

log_textarea = new JTextArea( 10, 10 );
//log_textarea.setEditable( false );
log_scrollpane = new JScrollPane( log_textarea );

east_panel = frame.getEastPanel();
east_panel.setLayout( new BorderLayout() );
east_panel.add( log_scrollpane, BorderLayout.CENTER );

frame.addComponentListener( this );

frame.setVisible( true );
}
//---------------------------------------------------------------------
public void updateGUI()
{
if( state == DISCONNECTED )
	{
	String Host = host_edit.getText();
	int port;
	try
		{
		port = Integer.parseInt( port_edit.getText() );
		}
	catch( NumberFormatException e )
		{
		port = -1;
		}
	
	if( !Host.equals( "" )
	 && port > 0
	 && port < 65536
	  )
		{
		connect_button.setEnabled( true );
		}
	else
		{
		connect_button.setEnabled( false );
		}
	disconnect_button.setEnabled( false );
	send_button.setEnabled( false );
	host_edit.setEnabled( true );
	port_edit.setEnabled( true );

	setTitle( appName );
	}
else if( state == CONNECTING )
	{
	host_edit.setEnabled( false );
	port_edit.setEnabled( false );
	connect_button.setEnabled( false );
	disconnect_button.setEnabled( false );
	send_button.setEnabled( false );

	setTitle( "Connecting ..." );
	}
else if( state == CONNECTED )
	{
	connect_button.setEnabled( false );
	disconnect_button.setEnabled( true );
	send_button.setEnabled( true );

	//setTitle( "Connected" );

		//偲傝偁偊偢IP傾僪儗僗傪昞帵偡傞
	InetAddress localAddr = socket.getLocalAddress();
	InetAddress remoteAddr = socket.getInetAddress();
	setTitle
		(
		"[ " + 
		localAddr.getHostAddress()  + " : " + socket.getLocalPort() + " ] - [ " +
		remoteAddr.getHostAddress() + " : " + socket.getPort()      + " ]"
		);

	MSimpleResolver Resolver = new MSimpleResolver( localAddr, remoteAddr );
	MResolverObserver Observer = new MResolverObserver( Resolver, this );
	Resolver.register1( Observer );
	ThreadPool.addCommand( Resolver );
	}
}
//---------------------------------------------------------------------
private void setTitle( String title )
{
if( !frame.getTitle().equals( title ) )
	{
	frame.setTitle( title );
	}
}
//---------------------------------------------------------------------
public void componentHidden( ComponentEvent e )
{
//壗傕偟側偄
}
//-----------------------------------------------------------------------------------------
public void componentShown( ComponentEvent e )
{
//壗傕偟側偄
}
//-----------------------------------------------------------------------------------------
public void componentMoved( ComponentEvent e )
{
//壗傕偟側偄
}
//-----------------------------------------------------------------------------------------
public void componentResized( ComponentEvent e )
{
}
//-----------------------------------------------------------------------------------------
public void changedUpdate( DocumentEvent e )
{
updateGUI();
}
//------------------------------------------------------------------------------------
public void insertUpdate( DocumentEvent e )
{
updateGUI();
}
//------------------------------------------------------------------------------------
public void removeUpdate( DocumentEvent e )
{
updateGUI();
}
//------------------------------------------------------------------------------------
public void actionPerformed( ActionEvent e )
{
if( e.getActionCommand().equals( "Connect" ) )
	{
	MConnector Connector = new MConnector( host_edit.getText(), Integer.parseInt( port_edit.getText() ) );
	MConnectorObserver ConnectorObserver = new MConnectorObserver( Connector, this );
	Connector.register1( ConnectorObserver );
	ThreadPool.addCommand( Connector );

	state = CONNECTING;
	updateGUI();
	}
else if( e.getActionCommand().equals( "Send" ) )
	{
	String str = send_textarea.getText().replaceAll( "\n", "\r\n" ) + "\r\n";
	MSender Sender = new MSender( net_output_stream, str.getBytes() );
	ThreadPool.addCommand( Sender );

	log_textarea.append( str );
	send_textarea.setText( "" );
	send_textarea.requestFocus();
	}
else if( e.getActionCommand().equals( "Disconnect" ) )
	{
	stopSession();
	}
}
//------------------------------------------------------------------------------------
public void stopSession()
{
synchronized( this )
	{
	if( state == DISCONNECTED )
		{
		return;
		}
	state = DISCONNECTED;
	}

if( socket != null )
	{
	if( !socket.isClosed() )
		{
		try
			{
			socket.close();
			}
		catch( IOException e )
			{
			}
		}
	}

socket = null;
net_input_stream = null;
net_output_stream = null;

GUI_updater.execute();
}
//------------------------------------------------------------------------------------
public void startSession( Socket IN_socket )
{
try
	{
	socket = IN_socket;
	net_input_stream = socket.getInputStream();
	net_output_stream = socket.getOutputStream();

	MStringReceiver Receiver = new MStringReceiver( net_input_stream );
	MReceiverObserver ReceiverObserver = new MReceiverObserver( Receiver, this );
	Receiver.register1( ReceiverObserver );
	ThreadPool.addCommand( Receiver );

	state = CONNECTED;
	GUI_updater.execute();
	}
catch( Exception e )
	{
	e.printStackTrace();
	}
}
//------------------------------------------------------------------------------------
public void updateText( final String str )
{
MSwingUtil su = new MSwingUtil()
	{
	public void updateSwing()
		{
		log_textarea.append( str + "\r\n" );
		}
	};
su.execute();
}
//------------------------------------------------------------------------------------
public void updateTitle( String localHostName, String remoteHostName )
{
if( state != CONNECTED )
	{
	return;
	}

InetAddress localAddr = socket.getLocalAddress();
InetAddress remoteAddr = socket.getInetAddress();

final String title =	"[ " + 
			localHostName  + " ( " + localAddr.getHostAddress()  + " ) : " + socket.getLocalPort() +
			" ] - [ " +
			remoteHostName + " ( " + remoteAddr.getHostAddress() + " ) : " + socket.getPort() +
			" ]";

MSwingUtil su = new MSwingUtil()
	{
	public void updateSwing()
		{
		setTitle( title );
		}
	};
su.execute();
}
//------------------------------------------------------------------------------------
}

⌨️ 快捷键说明

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