//
you're reading...
Codes, Java, Ruby

Các Mẫu Ví Dụ Lập Trình Mạng Của Ruby Và Java (tiếp theo)

Tiếp theo bài viết Các Mẫu Ví Dụ Lập Trình Mạng Của Ruby Và Java trước, bài viết này sẽ tiếp tục giới thiệu thêm các đoạn ví dụ mẫu trong lập trình mạng bằng ngôn ngữ Ruby và Java như: lập trình kết nối theo giao thức UDP, lập trình kết nối từ xa (RMI trong Java và DRB trong Ruby).


* Tạo chương trình gửi và nhận thông điệp giữa 2 máy bằng giao thức UDP:

1. Java:

// Server.java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) {
        try {
            DatagramSocket dsk = new DatagramSocket(2885);
            byte[] buffer = new byte[128];
            Scanner scan = new Scanner(System.in);
            String mess = new String();
            InetAddress addr = InetAddress.getByName("127.0.0.1");
            DatagramPacket dpk = new DatagramPacket(buffer, buffer.length);
            // Nhan thong diep tu client
            dsk.receive(dpk);
            System.out.println("Client: " + new String(buffer,0, dpk.getLength()));
            // Dong ket noi
            dsk.close();
            // Gui thong diep toi client
            dsk = new DatagramSocket();
            System.out.print("Server: ");
            mess = scan.nextLine();
            dpk = new DatagramPacket(mess.getBytes(), mess.length(), addr, 22486);
            dsk.send(dpk);
            // Dong ket noi
            dsk.close();
        } catch (SocketException e) {
            System.out.println("Loi: "  + e);
        } catch (IOException e) {
            System.out.println("Loi: " + e);
        }
    }
}
// Client.java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        try {
            DatagramSocket dsk = new DatagramSocket();
            byte[] buffer = new byte[128];
            Scanner scan = new Scanner(System.in);
            String mess = new String();
            InetAddress addr = InetAddress.getByName("127.0.0.1");
            DatagramPacket dpk;
            // Gui thong diep toi server
            System.out.print("Client: ");
            mess = scan.nextLine();
            dpk = new DatagramPacket(mess.getBytes(), mess.length(), addr, 2885);
            dsk.send(dpk);
            // Dong ket noi
            dsk.close();
            // Nhan thong diep tu server
            dsk = new DatagramSocket(22486);
            dpk = new DatagramPacket(buffer, buffer.length);
            dsk.receive(dpk);
            System.out.println("Server: " + new String(buffer,0, dpk.getLength()));
            // Dong ket noi
            dsk.close();
        } catch (SocketException e) {
            System.out.println("Loi: "  + e);
        } catch (IOException e) {
            System.out.println("Loi: " + e);
        }
    }
}

2. Ruby:

# Server.rb
require 'socket'
sock = UDPSocket::new
sock.bind("127.0.0.1", 2885)
mess, addr = sock.recvfrom(128)
puts "Client: " + mess
sock.close

sock = UDPSocket::new
printf "Server: "
mess = gets
sock.send(mess, 0, addr[2], 22486)
sock.close
# Client.rb
require 'socket'
sock = UDPSocket::new
printf "Client: "
data = gets
sock.send(data, 0, "127.0.0.1", 2885)
sock.close

sock = UDPSocket::new
sock.bind("127.0.0.1", 22486)
data, addr = sock.recvfrom(128)
puts "Server: " + data
sock.close

* Tạo chương trình ứng dụng RMI có chức năng đơn giản gọi một phương thức sayHello từ xa:

1. Java:

// iHello.java: Interface iHello
import java.rmi.*;

public interface iHello extends Remote {
    public String sayHello () throws RemoteException;
}
// HelloImple.java: Lớp triển khai interface iHello trên
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements iHello {
    public HelloImpl() throws RemoteException {}
    public String sayHello () throws RemoteException {
        System.out.println("Client yeu cau...");
        return "Hello Client!";
    }
}
// Server.java
import java.rmi.*;
import java.rmi.registry.LocateRegistry;

public class Server {
    public static void main(String[] args) {
        try {
            LocateRegistry.createRegistry(2885);
            HelloImpl cal = new HelloImpl();
            System.out.println("Dang dang ky doi tuong...");
            Naming.bind("rmi://localhost:2885/Hello", cal);
            System.out.println("Dang cho yeu cau tu client...");
        } catch (Exception e) {
            System.out.println("Loi: " + e);
        }
    }
}
// Client.java
import java.rmi.*;

public class Client {

    public static void main(String[] args) {
        try {
            System.out.println("Dang tim doi tuong...");
            iHello remoteCal = (iHello) Naming.lookup("rmi://localhost:2885/Hello");
            System.out.println("Server: " + remoteCal.sayHello());
        } catch (Exception e) {
            System.out.println("Loi: " + e);
        }
    }
}

2. Ruby:

# Hello.rb
class Hello
  def sayhello
    puts "Client yeu cau..."
    return "Hello Client"
  end
end
# Server.rb
require 'drb'
require 'hello'

server = Hello.new
puts "Dang dang ky doi tuong..."
DRb.start_service("druby://localhost:2885", server)
puts "Dang cho yeu cau tu client..."
DRb.thread.join
# Client.rb
require 'drb'
puts "Dang tim doi tuong..."
obj = DRbObject.new(nil, "druby://localhost:2885")
puts obj.sayhello()

~Fri3ng3R~

Advertisements

Discussion

No comments yet.

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: