📄 mtcpc.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 + -