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ề UNKNOWNCơ 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à 9999ServerSocket 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 đếnSocket 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ừ socketInputStream input = socClient.getInputStream();InputStreamReader ipR = new InputStreamReader(input);BufferedReader buffR= new BufferedReader(ipR);// Luồng xuất ra socketOutputStream 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ệuwhile (true){//(1). Lấy số từ client gửi tớiString 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 clientbuffW.write(dulieu_Di); buffW.newLine();buffW.flush();}// Bước 5. Đóng socketsocClient.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