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

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

Dưới đây là danh sách các đoạn code mẫu lập trình mạng cơ bản của Ruby và Java, được sắp xếp xen kẽ lẫn nhau nhằm giúp các bạn dễ so sánh sự khác biệt giữa 2 ngôn ngữ:

* Lấy thông tin của địa chỉ máy chủ:
1. Java:

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        System.out.print("Nhap ten may chu: ");
        Scanner sc = new Scanner(System.in);
        String server_name = sc.nextLine();
        try {
            InetAddress host  = InetAddress.getByName(server_name);
            System.out.println("Name: " + host.getHostName());
            System.out.println("IP: " + host.getHostAddress());
        }
        catch (UnknownHostException e)  {
            System.out.println("Ten may chu " + server_name +" khong ton tai!");
        }
    }
}

2. Ruby:

require "ipaddr" 
printf "Nhap ten may chu: "
server_name = gets.chomp()
begin
	puts "IP: " + IPSocket.getaddress(server_name)
rescue
	puts "Ten may chu #{server_name} khong ton tai"
end

* Lấy nội dung của một trang Web index.html từ máy chủ http://www.pragprog.com:
1. Java:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Main {

    public static void main(String[] args) {
        try {
            URL o = new URL("http://www.pragmaticprogrammer.com/index.html");
            BufferedReader inStream = new BufferedReader(new InputStreamReader(o.openStream()));
            String line;
            while ((line = inStream.readLine()) != null) {
                System.out.println(line);
            }
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}

2. Ruby:

require 'net/http'
h = Net::HTTP.new('www.pragprog.com', 80)
resp = h.get('/index.html' )
puts "Code = #{resp.code}"
puts "Message = #{resp.message}"
resp.each {|key, val| printf "%-14s = %-40.40s\n", key, val }
p resp.body

* Tạo chương trình Echo, máy client kết nối bằng socket với máy server, máy server nhận tin nhắn và trả kết quả đã bị đảo ngược trở về cho máy client:

1. Java:

//Server.java
import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) {        
		int port_des = 2885;
        try {
            //Tao doi tuong ServerSocket de lang nghe ket noi tu may client
            ServerSocket server = new ServerSocket(port_des);
            int local_port = server.getLocalPort();
            System.out.println("Server dang lang nghe o cong " + local_port);            
            //Cho doi va lay thong tin ket noi may client
            Socket client = server.accept();
            String dest_name = client.getInetAddress().getHostName();
            int dest_port = client.getPort();
            System.out.println("Da chap nhan ket noi o cong " + dest_port);
            //Lay luong du lieu nhap tu may client
            BufferedReader in_stream = new BufferedReader(new InputStreamReader(client.getInputStream()));
            //Lay luong du lieu xuat ra may client
            DataOutputStream out_stream =  new DataOutputStream(client.getOutputStream());
            boolean finished = false;
            do {
                //Doc chuoi nhap tu client
                String in_line = in_stream.readLine();
                System.out.println(">>> " + in_line);
                //Neu chuoi nhap vao la quit thi cham dut ket noi
                if(in_line.equalsIgnoreCase("quit")) finished = true;
                //Xu ly dao nguoc chuoi
                StringBuilder str_builder = new StringBuilder(in_line);
                String out_line = str_builder.reverse().toString();
                //Gui tra ket qua ve cho may client
                out_stream.writeBytes(out_line);
                out_stream.write(13);
                out_stream.write(10);
                out_stream.flush();
                System.out.println("<<< " + out_line);
            }while (!finished);
            //Dong ket noi
            in_stream.close();
            out_stream.close();
            client.close();
            server.close();        }
        catch (Exception e){
            System.out.println("Loi: " + e);
        }
    }
}
//Client.java
import java.net.*;
import java.io.*;
import java.util.*;
public class Client {
    public static void main(String[] args) {        
        String server_des = "localhost";
		int port_des = 2885;
        Socket conn; //Doi tuong ket noi
        DataOutputStream out; //Doi tuong gui du lieu den may server
        BufferedReader in; //Doi tuong doc du lieu tu may server
        Scanner scan = new Scanner(System.in);
        try {
            conn = new Socket(server_des, port_des);
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            out = new DataOutputStream(conn.getOutputStream());
            System.out.println("Da ke noi may chu " + server_des + " o cong " + port_des);
            boolean finished = false;
            do {
                System.out.print("<<< ");
                String line = scan.nextLine();
                if (line.length() > 0) {
                    out.writeBytes(line);
                    out.write(13);
                    out.write(10);
                    out.flush();
                }
                System.out.println(">>> " + in.readLine());
                if (line.equalsIgnoreCase("quit")) finished = true;
            } while(!finished);
            conn.close();
        } catch (Exception e) {
            System.out.println("Loi: " + e);
        }
    }
}

2. Ruby:

#Server.rb
require "socket"
# Cau hinh server
host = ''
port = 2885
size = 1000
# Tao Socket server
begin
  server = Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)
  server.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR,true)
  address = Socket.pack_sockaddr_in(port,host)
  server.bind(address)
  server.listen(5)
  p "Dang lang nghe ket noi o cong #{port}"
  begin
    client,address = server.accept
    p "Da ket noi o cong #{port}"
    while (data = client.recv(size))
      puts ">>> #{data}" 
      out_line = data.to_s.chomp!.reverse
      puts "<<< #{out_line}"
      client.puts "#{out_line}\n"
      break if (data.casecmp("quit") == 0)
    end  
  ensure
      client.close if client
  end
rescue SocketError => reason
  puts "Loi: #{reason}"
  exit
ensure
  server.close
end
#Client.rb
require 'socket'     
# Cau hinh ket noi
host = "localhost"
port = 2885
size = 1000
# Ket noi voi server
begin
  client = TCPSocket.new(host,port)
  p "Da ket noi voi server #{host} o cong #{port}"
  print "<<< "
  while data = gets
    client.send(data,0)    
    puts ">>> #{client.recv(size)}" 
    break if (data.chomp!.casecmp("quit") == 0)
    print "<<< "
  end
rescue => reason
  puts "Loi: #{reason}";
  exit
ensure
  client.close
end

~Fri3ng3R~

Advertisements

Discussion

4 thoughts on “Các Mẫu Ví Dụ Lập Trình Mạng Của Ruby Và Java

  1. bài của anh rất hay,
    cho em hỏi, là bây giờ em muốn lấy thông tin các giải kết quả xổ số của trang ketqua.net thì làm thế nào ạ, anh demo cho em với nhé,

    Posted by Hoangluongngoc | 28.05.2011, 16:08
  2. wordpress của anh đẹp thật đấy, em có thể tham gia được ko ?

    Posted by Hoangluongngoc | 28.05.2011, 16:19
  3. Cảm ơn bạn. 🙂

    Posted by Fri3ng3R | 08.06.2011, 20:53

Trackbacks/Pingbacks

  1. Pingback: Các Mẫu Ví Dụ Lập Trình Mạng Của Ruby Và Java (tiếp theo) « Fisama's Weblog - 05.11.2010

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: