- OutputStream getOutputStream() throws IOException: lấy về luồng xuất để máy khách (máy chủ) có thể ghi dữ liệu gửi đến máy chủ (máy khách).. - Ví dụ gửi chuỗi qua mạng, gửi số qua m[r]
Trang 1LẬP TRÌNH HỆ THỐNG MẠNG
TCP SOCKET
Nội dung chính:
- InputStream getInputStream() throws IOException: lấy về luồng nhập để máy khách (máy
chủ) có thể đọc dữ liệu trả về từ máy chủ (máy khách)
- OutputStream getOutputStream() throws IOException: lấy về luồng xuất để máy khách (máy
chủ) có thể ghi dữ liệu gửi đến máy chủ (máy khách)
- Ví dụ gửi chuỗi qua mạng, gửi số qua mạng
Bài tập 1: Viết chương trình từ Client nhập một chuỗi “thường” bất kỳ và gửi yêu cầu đến Server
xử lý và trả về kết quả chuỗi “HOA”
Class TCPServerUpperCase.java
package network.unit2;
import java.io.*;
import java.net.*;
class TCPServerUpperCase {
public static void main(String[] args) throws Exception {
int port = 9999;
System.out.println("Server khoi dong tai cong " + port);
ServerSocket server = new ServerSocket(port);
Socket client = server.accept();
Thread.sleep(3000);
System.out.println("Ket noi may khach thanh cong");
//br: bộ đệm nhận dữ liệu gửi đến từ client
BufferedReader br = new BufferedReader(new InputStreamReader(
client.getInputStream()));
//pw: gọi các phương thức gửi dữ liệu qua mạng của class PrintWriter
PrintWriter pw = new PrintWriter(client.getOutputStream());
String st = br.readLine();
String kq = processData(st);
System.out.println("Server dang xu ly ");
Thread.sleep(3000);
pw.write(kq + "\n"); //lệnh gửi dữ liệu đi
pw.flush();
System.out.println("Xong");
pw.close();
br.close();
client.close();
server.close();
}
Trang 2Class TCPClientUpperCase.java
package network.unit2;
import java.io.*;
import java.net.*;
class TCPClientUpperCase {
public static void main(String[] args) throws Exception {
int port = 9999;
String serverName = "localhost"; Socket server = new Socket(serverName, port);
System.out.println("Client dang ket noi den server");
Thread.sleep(5000);
//in: bộ đệm nhập liệu từ bàn phím
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//br: bộ đệm nhận dữ liệu trả về từ server
BufferedReader br = new BufferedReader(new
InputStreamReader(server.getInputStream()));
//pw: gọi các phương thức gửi dữ liệu qua mạng của class PrintWriter
PrintWriter pw = new PrintWriter(server.getOutputStream());
System.out.print("Nhap mot chuoi : ");
String st = in.readLine();
pw.write(st + "\n");
pw.flush();
System.out.println("Client dang gui cho Server dang xu ly ");
Thread.sleep(5000);
String kq = br.readLine(); //nhận dữ liệu từ server gửi đến client
System.out.println("Chuoi ket qua: " + kq);
pw.close();
br.close();
server.close();
}
}
Trang 3
Kết quả thực thi có dạng:
Client
Nếu thực thi với eclipse thì phải chuyển đổi qua lại giữa 2 cửa số eclipse để xem kết quả Sercer:
Trang 4Client
Bài tập 2: Nhập một chuỗi số từ Client, chuyển sang Server tính lũy thừa 2, trả kết quả về Client
TCPServerPower.java
package network.unit2;
import java.io.*;
import java.net.*;
class TCPServerPower {
public static void main(String[] args) throws Exception {
int port = 9999;
System.out.println("Server khoi dong tai cong " + port);
ServerSocket server = new ServerSocket(port);
Socket client = server.accept();
Thread.sleep(1000);
System.out.println("Ket noi may khach thanh cong");
//br: bộ đệm nhận dữ liệu gửi đến từ client
BufferedReader br = new BufferedReader(new InputStreamReader(
client.getInputStream()));
//pw: gọi các phương thức gửi dữ liệu qua mạng của class PrintWriter
PrintWriter pw = new PrintWriter(client.getOutputStream());
String st = br.readLine();
int num = Integer.parseInt(st);
long kq = processData(num);
System.out.println("Server dang xu ly ");
Thread.sleep(1000);
String strKq = String.valueOf(kq); //chuyển số thành chuỗi để gửi
pw.write(strKq + "\n"); //lệnh gửi dữ liệu đi
pw.flush();
System.out.println("Xong");
pw.close();
br.close();
client.close();
server.close();
}
public static long processData(int num){
return num * num; //Lũy thừa 2
}
}
Trang 5package network.unit2;
import java.io.*;
import java.net.*;
class TCPClientPower {
public static void main(String[] args) throws Exception {
int port = 9999;
String serverName = "localhost"; Socket server = new Socket(serverName, port);
System.out.println("Client dang ket noi den server");
Thread.sleep(2000);
//in: bộ đệm nhập liệu từ bàn phím BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//br: bộ đệm nhận dữ liệu trả về từ server BufferedReader br = new BufferedReader(new
InputStreamReader(server.getInputStream()));
//pw: gọi các phương thức gửi dữ liệu qua mạng của class PrintWriter PrintWriter pw = new PrintWriter(server.getOutputStream());
System.out.print("Nhap mot so : ");
String st = in.readLine();
pw.write(st + "\n");
pw.flush();
System.out.println("Client dang gui cho Server dang xu ly ");
Thread.sleep(2000);
String kq = br.readLine(); //nhận dữ liệu từ server gửi đến client System.out.println("Ket qua: " + kq);
pw.close();
br.close();
server.close();
}
}
Bài tập 3: Viết chương trình tính tổng từ 1 đến N, với N được nhập từ Client Server nhận yêu cầu
từ Client xử lý và trả kết quả về Client.
TCPServerSum.java
package network.unit2;
import java.io.*;
import java.net.*;
class TCPServerSum {
public static void main(String[] args) throws Exception {
int port = 9999;
System.out.println("Server khoi dong tai cong " + port);
ServerSocket server = new ServerSocket(port);
Socket client = server.accept();
//br: bộ đệm nhận dữ liệu gửi đến từ client
BufferedReader br = new BufferedReader(new InputStreamReader(
client.getInputStream()));
Trang 6int num = Integer.parseInt(st);
int kq = processData(num);
String strKq = String.valueOf(kq); //chuyển số thành chuỗi để gửi
pw.write(strKq + "\n"); //lệnh gửi dữ liệu đi
pw.flush();
pw.close();
br.close();
client.close();
server.close();
}
public static int processData(int num){
int t = 0;
for (int i = 1; i <= num; i++) {
t += i;
}
return t;
}
}
TCPClientSum.java
package network.unit2;
import java.io.*;
import java.net.*;
class TCPClientSum {
public static void main(String[] args) throws Exception {
int port = 9999;
String serverName = "localhost"; Socket server = new Socket(serverName, port);
//in: bộ đệm nhập liệu từ bàn phím
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//br: bộ đệm nhận dữ liệu trả về từ server
BufferedReader br = new BufferedReader(new
InputStreamReader(server.getInputStream()));
//pw: gọi các phương thức gửi dữ liệu qua mạng của class PrintWriter
PrintWriter pw = new PrintWriter(server.getOutputStream());
System.out.print("Nhap mot so : ");
String st = in.readLine();
pw.write(st + "\n");
pw.flush();
String kq = br.readLine(); //nhận dữ liệu từ server gửi đến client
System.out.println("Ket qua: " + kq);
pw.close();
br.close();
server.close();
}
}
Trang 7BÀI TẬP MỞ RỘNG
4 Viết chương trình tính tích từ 1 đến N, với N được nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client
5 Viết chương trình đếm số lượng số lẻ từ 1 đến N, với N được nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client
6 Viết chương trình đếm số lượng số nguyên tố từ 1 đến N, với N được nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client
7 Viết chương trình đếm số ký tự khoảng trắng có trong chuỗi nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client
8 Viết chương trình chuyển ký tự đầu của mỗi từ sang chữ in hoa Chuỗi nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client
9 Viết chương trình chuyển ký tự đầu của mỗi từ sang chữ in hoa Chuỗi nhập từ Client Server nhận yêu cầu từ Client xử lý và trả kết quả về Client