|
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 ){
}
} |