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

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

?? serverframe.java

?? java聊天室服務器
?? JAVA
字號:
package XXRoom;

import java.net.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.table.AbstractTableModel;
import java.util.List;
import java.util.ArrayList;
import javax.swing.text.*;


public class ServerFrame extends JFrame implements ActionListener
{	
	JTextField portTCP;//TCP端口
	JTable     table;//連接信息
	JButton    accept;//建立服務器
	JButton    kick;//踢人
	JButton    quit;//關閉服務器
	JCheckBox  autoTCP;//自動指定TCP端口	
	JLabel     portLabel1;
	JCheckBox  autoUDP;//自動指定UDP端口	
	JLabel     portLabel2;
	JTextField portUDP;//UDP端口
	JTextPane  tp;//監視用戶言論
	AbstractDocument doc;
	SimpleAttributeSet sacBlue;
	SimpleAttributeSet sacRed;
	SimpleAttributeSet sacBlack;

	JTextField tf;//發送消息
	JButton    send;//
	JScrollPane jsp;
	//右鍵彈出菜單
	JPopupMenu      menu;
	JMenuItem  menuClear;     

	JPanel     link;
	JPanel     info;
	JPanel     op;

	ServerSocket sSocket;
	DatagramSocket dSocket;
	
	ServerThread sThread;

	public ServerFrame( String s )
	{
	//	super( s );
		this.setUndecorated(true); // 去掉窗口的裝飾
        this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
		
		initCompent();

		addListeners();
		
		autoGetPorts();

		reLocate();
		
	}
	
	private void initCompent() 
	{
		link = new JPanel( new FlowLayout() );
		info = new JPanel( new BorderLayout() );
		op   = new JPanel( new FlowLayout() );

		autoTCP  = new JCheckBox ( "自動指定TCP端口" , true );
		portLabel1 = new JLabel ( "TCP端口" );
		portTCP  = new JTextField( 4 );
		portTCP.setEditable( false );

		autoUDP = new JCheckBox( "自動指定UDP端口", true );
		portLabel2 = new JLabel( "UDP端口" );
		portUDP = new JTextField( 4 );
		portUDP.setEditable( false );
		accept = new JButton( "accept" );

		table = new JTable( new LinkTableModel() );
		tp    = new JTextPane(  );
		tp.setEditable( false );
		

		kick = new JButton( "kick" );
		kick.setEnabled( false );
		quit = new JButton( "quit" );

		menu = new JPopupMenu();
		menuClear = new JMenuItem( "Clear" );
		menu.add( menuClear );

		tf = new JTextField( 30 );
		send = new JButton( "Send" );

		link.add( autoTCP );
		link.add( portLabel1 );
		link.add( portTCP );
		link.add( autoUDP );
		link.add( portLabel2 );
		link.add( portUDP );
		link.add( accept );

		info.add( new JScrollPane( table ) , BorderLayout.CENTER );
		jsp = new JScrollPane( tp );
		jsp.setPreferredSize( new Dimension( 100, 100 ) );
		info.add( jsp , BorderLayout.SOUTH );
				
		op.add( tf );
		op.add( send );
		op.add( kick );
		op.add( quit );			
		
		getContentPane().add( link, BorderLayout.NORTH );
		getContentPane().add( info, BorderLayout.CENTER );
		getContentPane().add( op, BorderLayout.SOUTH );	    

		StyledDocument sd = tp.getStyledDocument();
		if( sd instanceof AbstractDocument ) {
			doc = (AbstractDocument) sd;
		}
		else {
			System.err.println( "Can't cast the document" );
			System.exit( 0 );
		}
		sacBlue = new SimpleAttributeSet();
		StyleConstants.setForeground( sacBlue, Color.blue );
		sacRed = new SimpleAttributeSet();
		StyleConstants.setForeground( sacRed,  Color.red );
		sacBlack = new SimpleAttributeSet();
		StyleConstants.setForeground( sacBlack, Color.black );
	}
	
	private void addListeners()
	{
		//退出按鈕
		quit.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				dispose();
				System.exit( 1 );
			}
		});
		//令kick有效或無效
		table.getSelectionModel().addListSelectionListener( new ListSelectionListener() {
			public void valueChanged( ListSelectionEvent e ) {
				if( e.getValueIsAdjusting() )
					return;
				ListSelectionModel lsm = (ListSelectionModel)e.getSource();
				if( lsm.isSelectionEmpty() )
					kick.setEnabled( false );
				else
					kick.setEnabled( true );
			}
		});
		//自動選擇端口
		autoTCP.addActionListener( this );
		autoUDP.addActionListener( this );
		//連接
		accept.addActionListener( this );
		//ta右鍵菜單
		tp.addMouseListener( new MouseAdapter() {
			public void mouseReleased( MouseEvent e ) {				
				if( e.isPopupTrigger() ) {					
					menu.show( e.getComponent(), e.getX(), e.getY() );
				}
			}
		});
		//清屏
		menuClear.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				try
				{
					doc.remove( 0, doc.getLength() );
				}
				catch ( BadLocationException er )
				{
					er.printStackTrace();
				}				
			}
		});
		//踢人
		kick.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				
				ListSelectionModel lsm = table.getSelectionModel();
				int min = lsm.getMinSelectionIndex();
				int max = lsm.getMaxSelectionIndex();
				for( int i = min; i <= max; i ++ ) {
					if( lsm.isSelectedIndex( i ) ) {						
						//刪除clients用戶,messages添加消息,用戶收到后向服務器發送一條quit消息
						synchronized( sThread.messages ) {
							sThread.messages.add( "URFUCKED " + table.getValueAt( i, 1 ) );
						}											
					}
				}
			}
		});

		//發送消息
		tf.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				String s = tf.getText();
				if( s.length() == 0 )
					return;
				else {
					synchronized( sThread.messages ) {
						sThread.messages.add( "SERVER: " + s );
					}				
					appendChatMsg ( "Server:\n" , s + "\n" );
					tf.setText( "" );
				}
			}
		});
		send.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				String s = tf.getText();
				if( s.length() == 0 )
					return;
				else {
					synchronized( sThread.messages ) {
						sThread.messages.add( "SERVER: " + s );
					}				
					appendChatMsg ( "Server:\n" , s + "\n" );
					tf.setText( "" );
				}
			}
		});
	}
	
	public void actionPerformed( ActionEvent e ) 
	{
		if( e.getSource() == autoTCP ) {
			if( autoTCP.isSelected() == false ) {
				portTCP.setEditable( true );
			}
			else {
				portTCP.setEditable( false );
				//指定為原來自動獲取的端口
				portTCP.setText( Integer.toString( sSocket.getLocalPort() ) );
			}
		}
		if( e.getSource() == autoUDP ) {
			if( autoUDP.isSelected() == false ) {
				portUDP.setEditable( true );
			}
			else {
				portUDP.setEditable( false );
				//指定為原來自動獲取的端口
				portUDP.setText( Integer.toString( dSocket.getLocalPort() ) );
			}
		}
		if( e.getSource() == accept )  {
			try
			{
				int tcp = Integer.parseInt( portTCP.getText() );
				int udp = Integer.parseInt( portUDP.getText() );
				//如果端口號和自動指定的不同,重新申請
				if( tcp != sSocket.getLocalPort() ) {
					try
					{
						sSocket.close();
						sSocket = new ServerSocket( tcp );
					}
					catch ( IOException err )
					{
						JOptionPane.showMessageDialog( this, "TCP端口已被其他程序占用" );
						return;
					}
				}

				if( udp != dSocket.getLocalPort() ) {
					
					dSocket.close();
					try
					{
						dSocket = new DatagramSocket( tcp );
					}
					catch( SocketException errr )
					{
						JOptionPane.showMessageDialog( this, "UDP端口已被其他程序占用" );
						return;
					}										
				}
				//將所有相關控件置為不可用
				autoTCP.setEnabled( false );
				autoUDP.setEnabled( false );
				portTCP.setEditable( false );
				portUDP.setEditable( false );
				accept.setEnabled( false );
				
				//開始服務器線程
				JOptionPane.showMessageDialog( this, "OH YEAH! 端口可用,開始等待聯機" );
				sThread = new ServerThread( this );
				sThread.start();
			}
			catch ( NumberFormatException er )
			{
				JOptionPane.showMessageDialog( this, "數字格式不正確" );
			}			
		}
	}

	private void reLocate()
	{
		pack();
		//重新設定窗口位置
		int screenWidth = getToolkit().getScreenSize().width;
		int screenHeight = getToolkit().getScreenSize().height;		
		setLocation( screenWidth/2 - getSize().width/2, screenHeight/2 - getSize().height/2 );		
	}
	//自動獲取可用端口
	private void autoGetPorts()
	{
		int i = 1000;
		while( true ) {
			try
			{
				sSocket = new ServerSocket( i );
				portTCP.setText( Integer.toString( i ) );				
				break;
			}
			catch ( IOException e )
			{
				++ i;
			}
		}
		i = 1000;
		while( true ) {
			try
			{
				dSocket = new DatagramSocket( i );
				portUDP.setText( Integer.toString( i ) );
				break;
			}
			catch ( IOException ee )
			{
				++ i;
			}
		}
	}
	
	public void dispose()
	{
		try
		{			
			if( sThread != null ) {
				sThread.stop();
				sThread.dispose();
			}			
			if( sSocket != null ) 
				sSocket.close();
			if( dSocket != null )
				dSocket.close();			
		}
		catch ( IOException e )
		{
			JOptionPane.showMessageDialog( this, "關閉Socket發生異常" );
		}
		
		super.dispose();
	}
	
	public void appendChatMsg ( String s1, String s2 )
	{	
		try
		{
			doc.insertString( doc.getLength(), s1, sacBlue );
			doc.insertString( doc.getLength(), s2, sacBlack);
		}
		catch ( BadLocationException e )
		{
			e.printStackTrace();
		}
		jsp.validate();
		JScrollBar jsb = jsp.getVerticalScrollBar();
		jsb.setValue( jsb.getMaximum() );
	}
	
	public void appendSystemMsg ( String s )
	{
		try
		{
			doc.insertString( doc.getLength(), s, sacRed );
		}
		catch ( BadLocationException e )
		{
			e.printStackTrace();
		}
		jsp.validate();
		JScrollBar jsb = jsp.getVerticalScrollBar();
		jsb.setValue( jsb.getMaximum() );
	}
		
	public void appendPersonalChatMsg ( String from , String to, String s ) 
	{
		try
		{
			doc.insertString( doc.getLength(), from, sacBlue );
			doc.insertString( doc.getLength(), " 悄悄地對 " , sacBlack );
			doc.insertString( doc.getLength(), to , sacBlue );
			doc.insertString( doc.getLength(), " 說:\n" , sacBlack );
			doc.insertString( doc.getLength(), s , sacBlack );
		}
		catch ( BadLocationException e )
		{
			e.printStackTrace();
		}
		jsp.validate();
		JScrollBar jsb = jsp.getVerticalScrollBar();
		jsb.setValue( jsb.getMaximum() );
	}

	public static void main(String[] args) 
	{
	
		ServerFrame sf = new ServerFrame( "服務器端" );
		sf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );		
		
		try
		{		
			UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			SwingUtilities.updateComponentTreeUI( sf );
			sf.validate();
		}
		catch (Exception e )
		{
			System.out.println( "設置LookAndFeel失敗" );
		}
		
		sf.setVisible( true );	
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久网| 国产一区欧美二区| 国产亚洲欧美一区在线观看| 韩国视频一区二区| 久久伊99综合婷婷久久伊| 丁香天五香天堂综合| 亚洲免费av在线| 欧美日韩大陆一区二区| 国产99久久精品| 国产精品二三区| 日韩午夜在线播放| va亚洲va日韩不卡在线观看| 中文字幕精品三区| 一本久道久久综合中文字幕| 午夜不卡av在线| 久久青草国产手机看片福利盒子| 国内精品写真在线观看| 国产精品视频九色porn| 欧美日韩中文国产| 久久国产剧场电影| 中文字幕五月欧美| 在线观看91av| 欧美精品欧美精品系列| 91色视频在线| 成人在线综合网| 亚洲伊人色欲综合网| 亚洲欧洲一区二区三区| 欧美三区在线视频| 色综合久久综合中文综合网| 国内精品伊人久久久久影院对白| 亚洲国产aⅴ成人精品无吗| 久久精品亚洲精品国产欧美| 欧美精品欧美精品系列| 91偷拍与自偷拍精品| 久久精品久久99精品久久| 国产精品久久国产精麻豆99网站| 欧美日韩亚洲综合一区| 国产精品一区不卡| 国产91精品久久久久久久网曝门 | 欧美激情一区二区三区四区| 不卡的av中国片| 日韩不卡手机在线v区| 久久婷婷色综合| 欧美午夜寂寞影院| 精品日韩99亚洲| 欧美一区二区精品| 欧美视频一区在线观看| 色哟哟国产精品免费观看| 国产乱色国产精品免费视频| 亚洲国产一区视频| 美日韩一区二区三区| 亚洲精品美腿丝袜| 亚洲aaa精品| 日韩毛片视频在线看| 精品国产麻豆免费人成网站| 在线视频观看一区| 欧美亚洲国产bt| 欧美日韩高清在线播放| 波多野结衣在线一区| 99re热视频精品| av在线播放不卡| 色综合久久久网| 91麻豆精品91久久久久同性| 欧美性做爰猛烈叫床潮| 日本一区二区免费在线观看视频| 一区二区三区精品在线观看| 亚洲精品成人精品456| 中文字幕在线观看一区| 2024国产精品视频| 久久色在线观看| 亚洲一区在线观看网站| 午夜精品久久久久久久99水蜜桃| 亚洲国产成人av好男人在线观看| 亚洲1区2区3区视频| 亚洲与欧洲av电影| 久久精品国产精品亚洲精品| 视频一区二区欧美| 日韩精品一二三区| 日韩av网站在线观看| 日韩不卡免费视频| 国产在线精品视频| 欧美二区乱c少妇| 2014亚洲片线观看视频免费| 这里只有精品99re| 色综合天天性综合| 精品乱人伦小说| 一区二区激情小说| 午夜私人影院久久久久| 美女一区二区视频| 老司机精品视频在线| 成人午夜在线视频| 99视频精品在线| 欧美亚洲国产一区二区三区va| 日韩一卡二卡三卡四卡| 国产精品午夜春色av| 亚洲欧美成aⅴ人在线观看| 国产精品传媒在线| 激情综合五月婷婷| 99久久99久久免费精品蜜臀| 欧美日韩免费一区二区三区视频| 欧美这里有精品| 国产精品乱码一区二区三区软件 | 亚洲色欲色欲www| 一区二区三区高清在线| 国内外成人在线| 欧美日韩一区二区欧美激情| 精品国产乱码久久久久久蜜臀| 日本一区二区电影| 亚洲国产一区在线观看| 麻豆精品视频在线观看视频| 精品一区二区三区久久| 成人免费视频一区| av电影天堂一区二区在线| 日本一区二区三区视频视频| 裸体歌舞表演一区二区| 成人动漫一区二区三区| 日韩女优制服丝袜电影| 亚洲欧美区自拍先锋| 国产乱淫av一区二区三区| 欧美日韩你懂的| 国产精品理论片| 激情六月婷婷久久| 欧美色偷偷大香| 日本一区二区动态图| 黄色日韩三级电影| 久久久精品日韩欧美| 亚洲激情中文1区| 高清beeg欧美| 欧美一区二区三区四区在线观看 | 亚洲色图色小说| 韩国女主播一区二区三区| 欧美一区午夜视频在线观看| 一区二区高清免费观看影视大全| 成人福利视频网站| 精品剧情在线观看| 欧美疯狂做受xxxx富婆| 日韩一区欧美小说| 日韩av在线播放中文字幕| 国产精品国产三级国产有无不卡 | 一区二区三区影院| 91丝袜国产在线播放| 波多野结衣亚洲| 97久久超碰国产精品| 久久se这里有精品| 亚洲免费观看高清完整| 国产精品美女久久久久久久久久久| 成人美女视频在线观看18| 处破女av一区二区| 国产一区二区三区美女| 成人高清在线视频| 日韩精品一区二区三区视频在线观看 | 日本一区二区三区四区在线视频| 福利电影一区二区| 日韩国产精品久久| 亚洲成人你懂的| 亚洲777理论| 精品亚洲porn| www.色精品| 久久综合精品国产一区二区三区| 欧美一级日韩免费不卡| 欧美电影免费观看高清完整版在 | 久久久亚洲精华液精华液精华液 | 中文字幕日韩一区| 国产91精品久久久久久久网曝门| 日韩一区在线免费观看| 国产欧美一区二区三区沐欲| 国产在线播精品第三| 中文字幕日韩av资源站| 成人一级视频在线观看| 亚洲午夜影视影院在线观看| 欧美日韩色综合| 成人午夜精品在线| 伊人开心综合网| 欧美不卡在线视频| 欧美色视频一区| 色欧美88888久久久久久影院| 一区二区三区四区精品在线视频| 91美女在线看| 免费不卡在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 97超碰欧美中文字幕| 午夜精品福利一区二区三区蜜桃| 欧美日韩专区在线| 国产最新精品免费| 亚洲第一精品在线| 亚洲欧美日本韩国| 欧美日韩国产综合一区二区| 精品在线你懂的| 国产米奇在线777精品观看| 亚洲私人黄色宅男| 日本一区二区视频在线| 日韩一级片在线观看| 欧美日韩精品专区| 色综合天天综合在线视频| 青青草原综合久久大伊人精品 | 亚洲免费视频中文字幕| 欧美色综合网站| 色av成人天堂桃色av| 免费人成黄页网站在线一区二区| 亚洲日本在线视频观看|