[JavaNetwork]Bài 1- Lập trình mạng với java

Chào các bạn!
Hôm nay mình xin giới thiệu tới các bạn cơ bản về truyền nhận dữ liệu theo mô hình Client-Server bằng ngôn ngữ java.

Trước tiên bạn cần làm quen với khái niệm máy khách, sever. Máy khách hay sever thực ra chỉ là hai máy tính thường thì. Tuy nhiên, sever có thông số kỹ thuật cao hơn rất nhiều lần so với máy khách bởi sever thực thi nhiều việc làm hơn nhằm mục đích phân phối được cho nhiều máy khách .

Screenshot from 2014-04-24 00:06:42

Port: khái niệm port được hiểu là một cổng giao tiếp dùng để làm đường truyền, nhận dữ liệu. Trong máy tính hiện nay có tối đa xxx cổng(mình không nhớ lắm) và đã có một số cổng được đăng ký riêng để sử dụng truyền dữ liệu như dịch vụ mail, dịch vụ web, dịch vụ chat,…
Host address: Host được hiểu như là một mảnh đất trong một khu phố nào đó.
Domain: Domain là tên miền giống như địa chỉ của ngôi nhà được xây trên mảnh đất.
Ví dụ:
Vietsource.net là một tên miền, khi các bạn truy cập vào website này thì các bạn sẽ thấy nội dung của website đó. Nội dung website được lưu ở host. Như vậy một host có thể sẽ có nhiều tên miền khả dụng.

Vậy khi muốn truyền và nhận tài liệu giữa hai máy tính ta sẽ coi một máy là sever, một máy là máy khách. Trong đó để mở màn quy trình truyền thì máy khách phải dữ thế chủ động gửi thông tin cho sever để sever thực thi quy trình truyền. Để gửi được tài liệu cho sever thì máy khách cần biết địa chỉ host của nó chính là tên miền, đồng thời phải lao lý cổng truyền tài liệu giữa hai máy có giá trị bao nhiêu .
Truyền tài liệu trong java. Làm quen với khái niệm truyền nhận tài liệu trong java ta cần tách biệt hai đối tượng người tiêu dùng client và server. Ta phải viết hai chương trình độc lập, một chương trình chạy trên máy khách sẽ triển khai dữ thế chủ động gửi tài liệu cho sever và lắng nghe hiệu quả mà sever gửi lại, một chương trình giành riêng cho sever làm trách nhiệm luôn luôn lắng nghe máy khách cho tới khi nào nhận được một tin nhắn thì giải quyết và xử lý tin nhắn và gửi lại cho máy khách .
Vậy trước hết ta đi vào kiến thiết xây dựng chương trình cho máy khách :
Bắt đầu vào chương trình mình xin ra mắt qua đối tượng người tiêu dùng Socket, đối tượng người dùng này làm nhiệm tạo liên kết tới sever và được cho phép đưa tài liệu lên đường truyền và thực thi truyền cho sever .

package opin.connect;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientProcess {
	
	private Socket socket = null;
	
	public ClientProcess(String hostAddress, int port){
		try {
			socket = new Socket(hostAddress, port);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public boolean sendMSG(Object msg){
		
		if(socket == null)
			return false;
		
		try {
			ObjectOutputStream stream = new ObjectOutputStream(socket.getOutputStream());
			stream.writeObject(msg);
			return true;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return false;
	}

	public Object receiveMSG(){
		
		try {
			ObjectInputStream stream = new ObjectInputStream(socket.getInputStream());
			try {
				return stream.readObject();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public static void main(String args[]){
		// thực hiện kết nối tới máy chủ có địa chỉ là localhost theo cổng 345
		ClientProcess client = new ClientProcess("localhost", 9999);
		client.sendMSG(new String("chao cac ban")); // gửi thông tin cho server
		String s = (String) client.receiveMSG(); // nhận thông tin phản hồi từ server
		System.out.printf("Đã nhận một xâu từ máy chủ: " + s);
	}
		
}

Trong chương trình trên, quy trình truyền / nhận tài liệu mình sử dụng kiểu Object, như vậy bạn hoàn toàn có thể truyền và nhận bất kể kiểu tài liệu nào khác chỉ cần ép thành Object và từ Object ép ngược lại cho đúng kiểu là được. Ép kiểu giống với ví dụ mình truyền với kiểu String .

Lưu ý: khi chạy chương trình bạn cần chạy chương trình cho server trước rồi sau đó mới chạy chương trình của máy khách.

Tiếp theo là chương trình giành cho máy chủ. Máy chủ liên tục phải thực hiện lắng nghe thông tin gửi từ máy khách sau đó xử lý thông tin và gửi trả kết quả cho máy khách.
Khi làm việc với Server ta vẫn làm việc với socket nhưng đối tượng này chỉ giành riêng cho server và được định nghĩa là ServerSocket.

 
package opin.connect;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerProcess {
	private Socket socket;
	private ServerSocket serverSocket;	
	
	public ServerProcess(int port){
		try {
			serverSocket = new ServerSocket(port);
			System.out.println("Kết nối thành công tới port " + port);
		} catch (IOException e) {
			e.printStackTrace();
		}	

	}


	public Object receiveMSG(){
		try {
			socket = serverSocket.accept();		// lắng nghe kết nối từ đường truyền
			ObjectInputStream stream = new ObjectInputStream(socket.getInputStream()); // khởi tạo bộ đệm đọc
			try {
				return  stream.readObject();	// đọc dữ liệu từ bộ đệm
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public boolean sendMSG(Object msg){
		
		try {
			// khởi tạo bộ đệm ghi dữ liệu với đầu vào là bộ đệm của socket
			ObjectOutputStream stream = new ObjectOutputStream(socket.getOutputStream());
			stream.writeObject(msg);	// ghi dữ liệu lên bộ đệm của đường truyền
			return true;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return false;
	}
	

	public static void main(String args[]){
		// thực hiện khởi tạo lắng nghe kết nối từ cổng 345
		ServerProcess server = new ServerProcess(9999);
		String s =(String) server.receiveMSG(); // nhận thông tin từ Client
		System.out.printf("Đã nhận một xâu từ máy khách: " + s);
		server.sendMSG("Máy chủ đã nhận dữ liệu thành công"); // gửi thông tin cho Client
	}
}

Share this:

Thích bài này:

Thích

Đang tải …