Toma de stream usando en un applet de swing

Debería crear un servidor y cliente en Java, basado en Swing y GUI. Necesito hacer de algún modo un socket que vaya desde el servidor al cliente y del cliente al servidor, y pase algún tipo de cadena.I Me gustaría tener más tarde una función que haría varias cosas de acuerdo con la cadena que estaría en el socket.
Por alguna razón, no pude encontrar un ejemplo simple de código que muestre cómo se hace de una manera simple.
¿Alguien tiene un ejemplo simple o puede explicar cómo se está haciendo?

En base a este ejemplo , aquí hay un simple par de cliente-servidor de red que usa Swing. Tenga en cuenta algunos problemas relacionados con la sincronización correcta: la GUI se construye en el hilo de envío del evento utilizando invokeLater() . Además, el código se basa en la seguridad del hilo de append() . Finalmente, incorpora una sugerencia útil del artículo Text Text Scroll .

Actualización: en Java 7, append() ya no está marcado como seguro para subprocesos; invokeLater() se usa en display() para secuenciar actualizaciones.

imagen

 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(); } }); } } 

Un ejemplo básico sería este: (basado en el tutorial de Socket Programming en Java , por APRajshekhar)

 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(); }