Kết nối với server

Trước khi viết chương trinh chạy trên mạng, ta phải tìm hiếu về chương trình đăng nhập từ xa telnet.exe. Tìm chương trình này ờ thư mục \Windows…, nếu không thay, ta có thể chạy lại Setup.

Đề thực hiện một kết nối tù một telnet Client, ta phải chọn cổng đế kết nối mạng. Một hộp thoại nhắc ta cho một “Host Name”, địa chì IP của máy ở xa mà ta muốn kết nối và “Terminal Type” mô tả loai mô phỏng đầu cuối mà ta muốn thực hiện. Tất cả các quá trinh xử lý và lưu trữ kết quả điền ra trên máy tính từ xa.

Ta có thể sử dụng telnet để kết nối VỚI máy từ xa và để kiểm tra hộp thư của mình, nhưng không thể dùng nó để trao đổi VỚI các dịch vụ khác trên mạng. Ví dụ, ờ dòng lệnh DOS-Prompt, ta có thể dùng telnet đề xem “time of day” (thời gian trong ngày)

telnet time-A.timefreq.bldrdoc.gov 13

Theo qui ước, dich vụ “time of day” (xem giờ trong ngày) được gắn với cổng 13.

Một khi kết nối đươc thiết lập, chương trinh tù xa sẽ gừi lại thông tin, ví dụ

50692        98-09-02 22:45:15 50 0 0 5C.0 UTC(NIST) *

Trong Java ta có thể viết một chương trình khá đơn giản để thực hiện công việc giống như telnet.

Ví dụ 3.1. Chương trình Java thực hiện chức năng tương tự telnet.

// SocketTest.java chương trình thực hiện đăng nhập từ xa giống như telnet.

import java.ío.*;

import java.net.*;

public class SocketTest{ public static void main(string[] args){ try {

Socket s = new Socket(“time-A.timefreq.bldrdoc.gov”, 13);

BufferedReader in – new BufferedReader

(new InputStreamReader(s.getInputstream())); boolean more = true; while(more){

string line = in.readLine(); if(line == null) more = false; else System.out.println(line);

}

}catch(IOException e){

System.out.println(“Error : ” + e);

}

}

}

Đoan mã lệnh đầu tiên ta cần tìm hiểu là

Socket s = new SocketCtime-A.timefreq.bldrdoc.gov”, 13);

BufferedReader in = new BufferedReader

(new InputStreamReader(s.getlnputstream()));

Trong đó, Socket tạm dịch là cơ chế “ổ cắm”, được hiểu như là một bảng các chốt được thiết lập để cắm các thành phần tương ứng vào đó, giống như bảng các ổ phích cắm thiết bị điện dân dụng. Socket chính là ỉớp (trừu tượng) thực hiện sự trao đổi giừa các máy với nhau. Khi một Socket mờ thành công (thiết lập được sự kết nối giữa hai máy), ta có thể sử dụng phương thức get Inputs t ream () để đọc tin từ xa giống như đọc dữ liệu từ tệp đã được mờ để đọc.

Sau đó, chương trình trên đọc tất cả các ký tự được gùi đi từ Server bằng lệnh readLine() và in ra màn hình từng dòng một.

Tiếp theo ta muốn tạo ra sự kết nối với Server để nhận tin về Client. Khi chương trinh Server chạy, nó phải lắng nghe xem có chương trinh Client nào kết nối vào cổng đang chò, ví dụ cổng 8189 hay không.

ServerSocket s = new ServerSocket(8189);

Thiết lập một dịch vụ và lắng nghe sự kểt nối ờ cổng 8189.

Socket incoming = s.acceptf);

Chương trình chờ cho đến khi có một Client kết nối qua cổng 8189. Một khi sự kết nối qua cổng này được thiết lập, các thông tin trao đồi giữa hai máy sẽ được thực hiện.

Ví dụ 3.2. Chương trình thể hiện tiếng vọng (echo) của một Client.

// EchoServer java: Chương trình nhắc lại bản tin (tiếng vọng) nhận được, import java.io.*; import j ava.net.*;

public class EchoServer{ public static void main(string[] args){ try {

ServerSocket s = new ServerSocket(8189);

Socket incoming – s.accept();

ButferedReader in = new BufferedReader

(new InputStreamReader(incoming.getlnputstream()));

PrintWriter out = new PrintWriter

(incoming.getoutputstream(), true); out.println(“Hello! Enter Bye to exit.”); boolean done = false; while(!done){

string line = in.readLine(); if(line == null) done = true; else {

out.println(“Echo: ” + line); if(line.trim().equals(“Byẹ”)) done = true;

}

}

incoming.close();

}catch(lOException e){

System.out.println(“Error; ” + e) ;

)

}

Dịch xong và để chạy chương trình tiếng vọng, ta cẩn sừ dụng telnet để kết nối với Server: 127.0.0.1 và cổng 8189.

telnet 127.0.0.1 8189

Địa chi IP: 127.0.0.1 là địa chi máy cục bộ (local host) mà ta muốn chạy chương trình trên. Khi kết nối được với cổng 8189 thì ta có được màn hình trao đổi tin như hình 3.1. Gõ một mẩu tin bất kỳ, mẫu tin này sẽ được nhắc lại trên màn hình. Gõ “Bye” để kết thúc sự kết nối qua cồng đã được thiết lập đồng thời kết thúc chương trình.