Server communicate with the client – [Socket]


Hôm nay mình hướng dẫn nhanh gọn cách để tạo 1 client – 1 server connect với nhau

package com.gcs.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	public static void main(String[] args) {
		// initialize Client and connect to server with port 9999
		Client myClient = new Client();
		myClient.connectServer("127.0.0.1", 9999);

	}

	@SuppressWarnings("resource")
	public void connectServer(String server, int port){
		try {
			// Make a socket connection to whatever is running on server -  port
			Socket s = new Socket(server, port);

			// set BufferedReader to an InputStreamReader to get inputStream from Socket
			InputStreamReader isReader = new InputStreamReader(s.getInputStream());
			BufferedReader reader = new BufferedReader(isReader);
			// read data sent from server
			String serverMessage = reader.readLine();
			// show message
			System.out.println("Connect Server => Response from Server : "+ serverMessage);
			reader.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
package com.gcs.server;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) {
		Server myServer = new Server();
		myServer.publicServer();
	}

	@SuppressWarnings("resource")
	public void publicServer(){
		try {
			// ServerSocket make this server application listen for client request 
			// on port 4242 while(true) to listening continuous
			ServerSocket serverSocket = new ServerSocket(9999);
			System.out.println("Server start connect.....");
			while(true){
				// listening.....
				Socket sock = serverSocket.accept();
				// we use the socket connection to make PrintWriter and send String value to client
				PrintWriter writer = new PrintWriter(sock.getOutputStream());
				String strValue = "Hello World";
				writer.println(strValue);
				writer.close();
				System.out.println("Server==> Send data success....");
			}
		} catch (IOException e) {			
			e.printStackTrace();
		}
	}
}
  • Client và Server application giao tiếp với nhau thông qua Socket
  • Mổi một Socket đại diện cho một connection giữa 2 applation. và nó có thể run trên 2 máy tách rời nhau.
  • Mổi Client phải biết được cái IP address ( domain name) và cái cống TCP của server application
  • Cổng TCP ở dạng 16-bit. Các cổng từ 0-1023 là các cổng vững chắc của các services như các cổng HTTP, FTP, SMTP…
  • Chúng ta nên thiết lấp các cổng từ 1024 trở đi
  • Mổi Client khi connect đển server chúng ta thể hiện 1 Socket như sau : Socket s = new Socket(“127.0.0.1”,9999).
  • Mổi một connect , client có thể getInput, getOutput Streams từ Socket này. Đây là 1 dạng cấp thấp của data : sock.getInputStream();
  • Để đọc Text data từ Server. Chúng ta tạo ra BufferedReader với tham số là một InputStreamReader nhận inputSteam từ Socket
  • Để viết data to server , chúng ta tạo ra PrintWriter từ Socket output Stream. và gọi print method để send String to server
  • Server sử dụng Server Socket để chờ đợi ( lắng nghe ) request đến từ Client thông qua Port.
  • Khi serverSocket lấy được Request in sẻ tạo ra Connection với Client.
Chúc các bạn thành công

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: