Tutorial :Socket using in a swing applet



Question:

I should made a server & client in Java,based on Swing and gui.I neeed to make somehow a socket that will go from the server to the client and from the client to the server, and will pass some kind of a string.I would like to have later a function that would do several things according to the string that would be in the socket.
For some reason I couldn't find a simple example for code that shows how it's done in a simple way.
Anyone has any simple example or can explain how is it being done?


Solution:1

Based on this example, here's a simple network client-server pair using Swing. Note some issues related to correct synchronization: The GUI itself is constructed on the event dispatch thread using invokeLater(). In addition, the code relies on the thread safety of append(). Finally, it incorporates a handy tip from the article Text Area Scrolling.

Update: In Java 7, append() is no longer marked as thread safe; invokeLater() is used in display() to sequence updates.

image

package net;    import java.awt.*;  import java.awt.event.*;  import java.io.*;  import java.net.*;  import java.util.Scanner;  import javax.swing.*;  import javax.swing.text.DefaultCaret;    /**   * A simple network client-server pair   * @http://stackoverflow.com/questions/3245805   */  public class Echo implements ActionListener, Runnable {        private static final String HOST = "127.0.0.1";      private static final int PORT = 12345;      private final JFrame f = new JFrame();      private final JTextField tf = new JTextField(25);      private final JTextArea ta = new JTextArea(15, 25);      private final JButton send = new JButton("Send");      private volatile PrintWriter out;      private Scanner in;      private Thread thread;      private Kind kind;        public static enum Kind {            Client(100, "Trying"), Server(500, "Awaiting");          private int offset;          private String activity;            private Kind(int offset, String activity) {              this.offset = offset;              this.activity = activity;          }      }        public Echo(Kind kind) {          this.kind = kind;          f.setTitle("Echo " + kind);          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          f.getRootPane().setDefaultButton(send);          f.add(tf, BorderLayout.NORTH);          f.add(new JScrollPane(ta), BorderLayout.CENTER);          f.add(send, BorderLayout.SOUTH);          f.setLocation(kind.offset, 300);          f.pack();          send.addActionListener(this);          ta.setLineWrap(true);          ta.setWrapStyleWord(true);          DefaultCaret caret = (DefaultCaret) ta.getCaret();          caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);          display(kind.activity + HOST + " on port " + PORT);          thread = new Thread(this, kind.toString());      }        public void start() {          f.setVisible(true);          thread.start();      }        //@Override      public void actionPerformed(ActionEvent ae) {          String s = tf.getText();          if (out != null) {              out.println(s);          }          display(s);          tf.setText("");      }        //@Override      public void run() {          try {              Socket socket;              if (kind == Kind.Client) {                  socket = new Socket(HOST, PORT);              } else {                  ServerSocket ss = new ServerSocket(PORT);                  socket = ss.accept();              }              in = new Scanner(socket.getInputStream());              out = new PrintWriter(socket.getOutputStream(), true);              display("Connected");              while (true) {                  display(in.nextLine());              }          } catch (Exception e) {              display(e.getMessage());              e.printStackTrace(System.err);          }      }        private void display(final String s) {          EventQueue.invokeLater(new Runnable() {              //@Override              public void run() {                  ta.append(s + "\u23CE\n");              }          });      }        public static void main(String[] args) {          EventQueue.invokeLater(new Runnable() {              //@Override              public void run() {                  new Echo(Kind.Server).start();                  new Echo(Kind.Client).start();              }          });      }  }  


Solution:2

A basic example would be this: (based on tutorial from Socket Programming in Java, by A.P.Rajshekhar)

public static void main(String[] args) throws      UnknownHostException, IOException, InterruptedException {        Thread serverThread = new Thread(new Runnable() {            @Override          public void run() {              try {                  // create the server socket                  ServerSocket server = new ServerSocket(                      8888, 5, InetAddress.getLocalHost());                  // wait until clients try to connect                  Socket client = server.accept();                    BufferedReader in = new BufferedReader(new                      InputStreamReader(client.getInputStream()));                    // loop until the connection is closed                  String line;                  while ((line = in.readLine()) != null) {                      // output what is received                      System.out.println(line);                  }                  } catch (Exception e) {                  e.printStackTrace();              }          }      });        Thread clientThread = new Thread(new Runnable() {            @Override          public void run() {              try {                  // connect with the server                  Socket s = new Socket(InetAddress.getLocalHost(), 8888);                    // attach to socket's output stream with auto flush turned on                  PrintWriter out = new PrintWriter(s.getOutputStream(), true);                    // send some text                  out.println("Start");                  out.println("End");                  // close the stream                  out.close();              } catch (Exception e) {                  e.printStackTrace();              }          }      });        // start server      serverThread.start();      // wait a bit      Thread.sleep(1000);      // start client      clientThread.start();  }  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »