The data is transferred as bytes but object which is serializable can be transferred because serializations means that the object convert to a piece of string and strings are arrays of characters which themselves consist of bytes.
So, we can transfer almost everything using TCP sockets.
In this example, we follow this scenario:
- We create a server socket which is going to listen to the port number 12345
- The server can respond to only one request.
- When a client try to connect to the server on port 12345, the server accept the connection and send the client a welcome message.
- The client app will show the server welcome message on the terminal and send a message back in reply.
- The server will show the client message and close the connection.
Server Class
package tcp.socket.basic;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* http://codetoearn.blogspot.com/
*
* @author ehsun7b
*/
public class Server {
public static final int port = 12345;
private ServerSocket serverSocket;
public void listen() {
try {
/* creating the serverSocket object */
serverSocket = new ServerSocket(port);
/* serverSocket waits for one client */
Socket clientSocket = serverSocket.accept();
/* getting input and output streams of the client socket */
OutputStream outputStream = clientSocket.getOutputStream();
InputStream inputStream = clientSocket.getInputStream();
/* sending welcome message to the client */
String message = "Welcome! You are connected to the "
+ serverSocket.getInetAddress()
+ " on port " + port + "\n";
outputStream.write(message.getBytes());
outputStream.flush();
/* getting the client reply */
int character = inputStream.read();
while (character != -1 && character != '\n') {
System.out.print((char) character);
character = inputStream.read();
}
inputStream.close();
outputStream.close();
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
}
}
/* creating new server and call it's listen method */
public static void main(String[] args) {
new Server().listen();
}
}
And on the client side we are doing the reverse order. We first get the server welcome message and show it and then we send a message to the server as a reply.
Client Class
package tcp.socket.basic;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* http://codetoearn.blogspot.com/
*
* @author ehsun7b
*/
public class Client {
public static final int port = 12345;
public static final String host = "127.0.0.1";
private Socket socket;
public void connect() {
try {
/* creating the socket and trying to connect */
socket = new Socket(host, port);
/* getting input and output streams of the socket */
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
/* getting the server message */
int character = inputStream.read();
while (character != -1 && character != '\n') {
System.out.print((char) character);
character = inputStream.read();
}
/* replying the server */
String message = "I am the client and thanks for accepting me.\n";
outputStream.write(message.getBytes());
outputStream.flush();
inputStream.close();
outputStream.close();
} catch (Exception ex) {
System.out.println("Error: " + ex.getMessage());
}
}
public static void main(String[] args) {
new Client().connect();
}
}
Note that the server program should be executed first.
Download the programs here.
No comments:
Post a Comment