Creating a Socket Connection and Sending Serializable Objects Across the Wire - Java Network

Java examples for Network:TCP

Description

Creating a Socket Connection and Sending Serializable Objects Across the Wire

Demo Code

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.Channels;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeoutException;

public class Main {
  InetSocketAddress hostAddress;//from w w w. ja v  a 2s.  c  o m
  void start() throws Exception {
    hostAddress = new InetSocketAddress(InetAddress.getByName("127.0.0.1"),1234);

    Thread serverThread = new Thread(() -> {serverStart();});

    serverThread.start();

    Thread clientThread = new Thread(() -> {clientStart();});
    clientThread.start();

  }

  private void clientStart() {
    try {
      try (AsynchronousSocketChannel clientSocketChannel = AsynchronousSocketChannel.open()) {
        Future<Void> connectFuture = clientSocketChannel.connect(hostAddress);
        connectFuture.get();
        OutputStream os = Channels.newOutputStream(clientSocketChannel);
        try (ObjectOutputStream oos = new ObjectOutputStream(os)) {
          for (int i = 0; i < 5; i++) {
            oos.writeObject("Look at me " + i);
            Thread.sleep(1000);
          }
          oos.writeObject("EOF");
        }
      }
    } catch (IOException | InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }

  }

  private void serverStart() {
    try {
      AsynchronousServerSocketChannel serverSocketChannel = AsynchronousServerSocketChannel.open().bind(hostAddress);
      Future<AsynchronousSocketChannel> serverFuture = serverSocketChannel.accept();
      final AsynchronousSocketChannel clientSocket = serverFuture.get();
      System.out.println("Connected!");
      if ((clientSocket != null) && (clientSocket.isOpen())) {
        try (InputStream connectionInputStream = Channels.newInputStream(clientSocket)) {
          ObjectInputStream ois = null;
          ois = new ObjectInputStream(connectionInputStream);
          while (true) {
            Object object = ois.readObject();
            if (object.equals("EOF")) {
              clientSocket.close();
              break;
            }
            System.out.println("Received :" + object);
          }
          ois.close();
        }
      }

    } catch (IOException | InterruptedException | ExecutionException
        | ClassNotFoundException e) {
      e.printStackTrace();
    }

  }

  public static void main(String[] args) throws Exception {
    Main example = new Main();
    example.start();
  }

}

Result


Related Tutorials