Server. java Import java. awt. event. ActionEvent; Import java. awt. event. ActionListener; Import java. awt. event. KeyEvent; Import java. awt. event. KeyListener; Import java. io. DataInputStream; Import java. io. DataOutputStream; Import java. io. IOException; Import java.net. ServerSocket; Import java.net. Socket; Import javax. swing. JButton; Import javax. swing. JFrame; Import javax. swing. JOptionPane; Import javax. swing. JScrollPane; Import javax. swing. JTextArea; Import javax. swing. JTextField; Import javax. swing. UIManager; Public class Server { Public static void initUIManager (){ Try { UIManager. setLookAndFeel (UIManager. getSystemLookAndFeelClassName ()); } Catch (Exception e ){ System. err. println ("failed to get System appearance:" + e ); } } Public static void main (String [] args ){ InitUIManager (); New ServerFrame (); } }
Class ServerFrame extends JFrame implements Runnable, ActionListener, KeyListener { Private static final long serialVersionUID = 1969584312152336324L; JScrollPane textPane; JTextArea areaText; JTextField fieldMsg; JButton butSend; JButton butConnect; ServerSocket socket; Socket you; DataInputStream in; DataOutputStream out; Thread thread; Public static int WIDTH = 500; Public static int size = 400; Public static String title = "Server: Click Connect to start accepting Client requests "; Public ServerFrame (){ Init (); SetTitle (title ); SetSize (WIDTH, HEIGHT ); SetLocationRelativeTo (null ); SetVisible (true ); Setdefaclocloseoperation (JFrame. EXIT_ON_CLOSE ); } Public void init (){ SetLayout (null ); AreaText = new JTextArea (); AreaText. setLineWrap (true ); TextPane = new JScrollPane (areaText );
ButSend = new JButton ("Send "); FieldMsg = new JTextField (255 ); ButSend. addActionListener (this ); ButConnect = new JButton ("Connect "); ButConnect. addActionListener (this );
TextPane. setBounds (5, 5, WIDTH-25, HEIGHT-80 ); FieldMsg. setBounds (5, HEIGHT-70, WIDTH-220, 24 ); ButSend. setBounds (WIDTH-195, HEIGHT-70, 80, 24 ); ButConnect. setBounds (WIDTH-100, HEIGHT-70, 80, 24 );
FieldMsg. addKeyListener (this );
Add (textPane ); Add (butSend ); Add (fieldMsg ); Add (butConnect ); Thread = new Thread (); } Public void startSocket (){ Try { AreaText. append ("Waiting for clients... n "); Socket = new ServerSocket (4331 ); You = socket. accept (); AreaText. append ("A Client is currently accepted by server... n "); In = new DataInputStream (you. getInputStream ()); Out = new DataOutputStream (you. getOutputStream ()); If (! Thread. isAlive ()){ Thread = new Thread (this ); } Thread. start (); } Catch (Exception e ){ System. out. println (e ); Try { Socket = new ServerSocket (4331 ); } Catch (IOException e1 ){ E1.printStackTrace (); } } } Public void send (){ String msg = fieldMsg. getText (). trim (); If (msg. isEmpty ()){ JOptionPane. showMessageDialog (this, "Please input you message before sending ."); Return; } AreaText. append ("Server:" + msg + "n "); Try { Out. writeUTF (msg ); } Catch (Exception e ){ E. printStackTrace (); } } @ Override Public void actionreceivmed (ActionEvent arg0 ){ If (arg0.getSource () = butSend ){ Send (); } Else if (arg0.getSource () = butConnect ){ StartSocket (); } } @ Override Public void run (){ If (Thread. currentThread () = thread ){ String msg = null; While (true ){ Try { Msg = in. readUTF (); AreaText. append ("Client:" + msg + "n "); } Catch (IOException e ){ E. printStackTrace (); Try { Socket = new ServerSocket (4331 ); } Catch (IOException e1 ){ E1.printStackTrace (); } Break; } } } } @ Override Public void keyPressed (KeyEvent arg0 ){ If (arg0.getKeyCode () = KeyEvent. VK_ENTER ){ Send (); } } @ Override Public void keyReleased (KeyEvent arg0 ){
} @ Override Public void keyTyped (KeyEvent arg0 ){
} } Client. java Import java. awt. event. ActionEvent; Import java. awt. event. ActionListener; Import java. awt. event. KeyEvent; Import java. awt. event. KeyListener; Import java. io .*; Import java.net .*; Import javax. swing. JButton; Import javax. swing. JFrame; Import javax. swing. JOptionPane; Import javax. swing. JScrollPane; Import javax. swing. JTextArea; Import javax. swing. JTextField; Import javax. swing. UIManager; Public class Client { Public static void initUIManager (){ Try { UIManager. setLookAndFeel (UIManager. getSystemLookAndFeelClassName ()); } Catch (Exception e ){ System. err. println ("failed to get System appearance:" + e ); } } Public static void main (String [] args ){ InitUIManager (); New ClientFrame (); } } Class ClientFrame extends JFrame implements Runnable, ActionListener, KeyListener { Private static final long serialVersionUID = 8518637966119429018l; JScrollPane textPane; JTextArea areaText; JTextField fieldMsg; JButton butSend; JButton butConnect; Socket socket; DataInputStream in; DataOutputStream out; Thread thread; Public static int WIDTH = 500; Public static int size = 400; Public static String title = "Client "; Private static final String IP_ADDRESS = "127.0.0.1 "; Public ClientFrame (){ Init (); SetTitle (title ); SetSize (WIDTH, HEIGHT ); SetLocationRelativeTo (null ); SetVisible (true ); Setdefaclocloseoperation (JFrame. EXIT_ON_CLOSE ); } Public void init (){ SetLayout (null ); AreaText = new JTextArea (); AreaText. setLineWrap (true ); TextPane = new JScrollPane (areaText );
ButSend = new JButton ("Send "); ButSend. addKeyListener (this ); FieldMsg = new JTextField (255 ); ButSend. addActionListener (this ); ButConnect = new JButton ("Connect "); ButConnect. addActionListener (this );
TextPane. setBounds (5, 5, WIDTH-25, HEIGHT-80 ); FieldMsg. setBounds (5, HEIGHT-70, WIDTH-220, 24 ); ButSend. setBounds (WIDTH-195, HEIGHT-70, 80, 24 ); ButConnect. setBounds (WIDTH-100, HEIGHT-70, 80, 24 );
Add (textPane ); Add (butSend ); Add (fieldMsg ); Add (butConnect );
FieldMsg. addKeyListener (this );
Socket = new Socket (); Thread = new Thread (this ); } Public void startSocket (){ Try { If (! Socket. isConnected ()){ InetAddress address = InetAddress. getByName (IP_ADDRESS ); InetSocketAddress socketAddress = new InetSocketAddress (address, 4331 ); Socket. connect (socketAddress ); In = new DataInputStream (socket. getInputStream ()); Out = new DataOutputStream (socket. getOutputStream ()); ButSend. setEnabled (true ); If (! (Thread. isAlive ())){ Thread = new Thread (this ); } Thread. start (); } } Catch (Exception e ){ System. out. println (e ); Socket = new Socket (); } } Public void send (){ String msg = fieldMsg. getText (). trim (); If (msg. isEmpty ()){ JOptionPane. showMessageDialog (this, "Please input you message before sending ."); Return; } AreaText. append ("Client:" + msg + "n "); Try { Out. writeUTF (msg ); } Catch (Exception e ){ E. printStackTrace (); } } @ Override Public void actionreceivmed (ActionEvent arg0 ){ If (arg0.getSource () = butSend ){ Send (); } Else if (arg0.getSource () = butConnect ){ StartSocket (); } } @ Override Public void run (){ If (Thread. currentThread () = thread ){ String msg = null; While (true ){ Try { Msg = in. readUTF (); AreaText. append ("Server:" + msg + "n "); } Catch (IOException e ){ E. printStackTrace (); Socket = new Socket (); Break; } } } } @ Override Public void keyPressed (KeyEvent arg0 ){ If (arg0.getKeyCode () = KeyEvent. VK_ENTER ){ Send (); } } @ Override Public void keyReleased (KeyEvent arg0 ){
} @ Override Public void keyTyped (KeyEvent arg0 ){
} } |