CÔNG VIỆC CỦA CHÚNG TÔI

+ Đào tạo & hỗ trợ thi & Cấp chứng chỉ Ứng dụng CNTT cơ bản, nâng cao
+ Cung cấp dịch vụ Thiết kế - Lập trình web
+ Các giải pháp triển khai - quản trị hệ thống mạng doanh nghiệp
+ ĐÀO TẠO CHUYÊN NGHIỆP: LẬP TRÌNH (C, .Net, ASP.net, PHP, Thiết kế Đồ họa

Lập trình mạng TCP Socket (1)

 


Bài 1
Đề bài: Tạo ra hai ứng dụng độc lập (một client và một server). Client chấp nhận một trong các số sau: 1, 2, 3. Số này sẽ được gửi đến server. Server sẽ trả lại tương ứng : “ONE” hoặc “TWO” hoặc “THREE” (tùy theo số nhận được). Dùng giao thức TCP/IPChức năng chương trình:- Client gửi số bất kì đến SERVER
- Nếu là số 1,2,3 thì trả về ONE,TWO,THREE, các trường hợp còn lại trả về UNKNOWN
Cơ chế:- SERVER mở cổng để client truy xuất đến
- Tạo các luồng nhập xuất khi có client truy cập đến (cả client và SERVER), lúc này client và server có thể gửi thông tin qua lại lẫn nhau
- Client truy cập vào, sau đó gửi thông tin đến server
- Server nhận được thông tin, rồi xử lí, sau đó gửi trả lại client
- Client hiển thị thông tin mà server đã trả về


Các lớp và chức năng các lớp:
NumberTCPSimpleServer

- Lớp này có phương thức go(), chức năng của nó:
o Mở cổng của server, tạo kết nối mỗi khi có client kết nối
o Chờ nhận dữ liệu từ Client gửi lêno Xử lí dữ liệu
o Trả về client

- Phương thức main của lớp này tạo ra đối tượng thuộc lớp 
NumberTCPSimpleServer, sau đó gọi phương thức go() của lớp này

Giao tiếp kết thúc nếu nhận được chuỗi "bye"

NumberTCPSimpleClient

- Phương thức khởi tạo của lớp này có đối số là chuỗi về địa chỉ của server
- Phương thức go():

o Tạo kết nối đến địa chỉ và số hiệu cổng của server
o Tạo các luồng nhập xuất liên kết với server
o Đưa dữ liệu cần gửi hoặc nhận vào các luồng này
o Gửi dữ liệu đến server
o Nhận dữ liệu (sau khi server đã xử lí) rồi hiển thị lên màn hìn
Giao tiếp kết thúc nếu nhận được chuỗi "bye"

FULL CODE
NumberTCPSimpleServer .Java 
import java.io.*; 
import java.net.ServerSocket;
import java.net.Socket;
public class NumberTCPSimpleServer {
public static void go() throws IOException {
// Bước 1: Khởi tạo một đối tượng ServerSocket để nghe yêu
// cầu kết nối từ client
// cổng lắng nghe là 9999
ServerSocket socServer = new ServerSocket(9999);
System.out.println("Server in running, on port 9999");
while (true)
{
// Bước 2: Chấp nhận kết nối từ client gửi đến
Socket socClient  = socServer.accept();
System.out.println("Accept client IP:" +  socClient.getInetAddress());
System.out.println("We will working on port:" +  socClient.getPort());
   // Bước 3: lấy các luồng nhập/ xuất để làm việc với client
  // Luồng nhập  từ socket
  InputStream input = socClient.getInputStream();
  InputStreamReader ipR = new InputStreamReader(input);
  BufferedReader buffR= new BufferedReader(ipR);
  
  // Luồng xuất ra socket
  OutputStream ouput = socClient.getOutputStream();
  OutputStreamWriter outW = new OutputStreamWriter(ouput);
  BufferedWriter  buffW = new BufferedWriter(outW);
// Bước 4. Tiến hành giao thức trao đổi dữ liệu
  while (true)
  {
  //(1). Lấy số từ client gửi tới
  String dulieu_Den = buffR.readLine();
  System.out.println(dulieu_Den);
  if (dulieu_Den.compareTo("bye")==0) break;
  //(2). Tính toán kết quả trả về
  String dulieu_Di="UNKNOWN";
  if (dulieu_Den.compareTo("1")==0) dulieu_Di="ONE";
  if (dulieu_Den.compareTo("2")==0) dulieu_Di="TWO";
  if (dulieu_Den.compareTo("3")==0) dulieu_Di="THREE";
  //(3). Gửi về cho client
  buffW.write(dulieu_Di); buffW.newLine(); 
  buffW.flush();
  }
   // Bước 5. Đóng socket
socClient.close();   
}
}
public static void main(String[] args) {
try {
go();
} catch (IOException e) {
e.printStackTrace();
}
}

}

File  NumberTCPSimpleClient .java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class NumberTCPSimpleClient {

public static void go() throws UnknownHostException, IOException
{
//Bước 1: Khởi tạo một đối tượng Socket để kết nối với server
Socket soc = new Socket("localhost",9999);
// Bước 2: 
 // Luồng nhập  từ socket
  InputStream input = soc.getInputStream();
  InputStreamReader ipR = new InputStreamReader(input);
  BufferedReader buffR= new BufferedReader(ipR);
  
  // Luồng xuất ra socket
  OutputStream ouput = soc.getOutputStream();
  OutputStreamWriter outW = new OutputStreamWriter(ouput);
  BufferedWriter  buffW = new BufferedWriter(outW);
    // Bước 3, tiến hành giao thức
      //(0) chuẩn bị
         String dulieu_Di="";
         String dulieu_Den="";
         BufferedReader banPhim = new BufferedReader( 
                               new InputStreamReader(System.in)); 
  
      // Thực hiện
         while (true)
         {
         System.out.println("Mời nhập số (bye để dừng):");
         String dulieu = banPhim.readLine();
         if (dulieu_Den.compareTo("bye")==0) break;
         
         //Gửi đi
         dulieu_Di = dulieu;
         buffW.write(dulieu_Di); buffW.newLine();
         buffW.flush();
         // Lấy về
         dulieu_Den = buffR.readLine();
         System.out.println(dulieu_Den);
         }
// Bước 4. Đóng kết nối
         soc.close();
}
public static void main(String[] args) {
try {
go();
} catch (IOException e) {
e.printStackTrace();
}
}

}


EmoticonEmoticon