Tải bản đầy đủ - 0 (trang)
3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER

3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER

Tải bản đầy đủ - 0trang

Báo cáo thực hành lập trình mạng



2014



// Gửi tên file qua server

dos.writeUTF(file.getName());

dis.read();

Print_Debug("Tên file: " + file.getName());

// Gửi kích thước file

sizeFile = file.length();

dos.writeLong(sizeFile);

dis.read();

Print_Debug("Kích thước file: " + sizeFile);

int x;

x = fis.read(part);

// Gửi dữ liệu

while (x > -1) {

dos.write(part);

dis.read();

x = fis.read(part);

}

fis.close();

// Gửi số giám thị coi thi

dos.writeInt(soGiamThi_CoiThi);

dis.read();

Print_Debug("Gửi số lần đã phân công");

GuiSoLan();

// Hoàn thành việc gửi

Print_Debug("Đã hoàn thành việc gửi");

Print_Debug("----------------------------");

}

public void GuiSoLan() throws IOException {

RandomAccessFile rf;

try {



rf = new RandomAccessFile("số lần đã phân công.txt", "r");

soLanPhanCong = rf.readInt();

} catch (FileNotFoundException e) {

soLanPhanCong = 0;

} catch (IOException e) {

soLanPhanCong = 0;

}



}



Print_Debug("Số lần phân công: " + soLanPhanCong);

dos.writeInt(soLanPhanCong);

dis.read();



2.3.1.2 Nhận dữ liệu từ Server

Thuật toán:

B1: Nhận tên file. Gửi xác nhận.

B2: Tạo file với tên file đã nhận. Mở luồng ghi.



Page 38



B3: Nhận kích thước file. Gửi xác nhận.

B4: Lặp khi chưa nhận đủ số byte của file: Đọc dữ liệu vào mảng byte 1024 phần tử

B4.1: Nếu số byte còn lại < 1024:

B4.1.1: Chỉ nhận đúng số lượng byte còn lại từ luồng vào.

B4.1.2: Ghi vào file số byte còn lại.

B4.2: Ngược lại:

B4.2.1: Nhận đủ số byte trong mảng từ luồng vào.

B4.2.2: Ghi vào file số byte vừa nhận.

B4.3: Gửi xác nhận.

B5: Đóng luồng ghi file.

Cài đặt:

public void ReceiveFile() throws IOException {

long remainSize;

String nameFile;

int byteRead = 0;

long sizeFile;

// Nhận tên file

nameFile = dis.readUTF();

dos.write(1);

Print_Debug("Tên file kết quả: " + nameFile);

// Tạo file

fileResult = new File(file.getParent() + "\\" + nameFile);

fos = new FileOutputStream(fileResult);

Print_Debug("Đường dẫn: " + fileResult.getPath());

// Nhận kích thước file

sizeFile = dis.readLong();

dos.write(1);

Print_Debug("Kích thước file kết quả: " + sizeFile);

// Nhận dữ liệu

remainSize = sizeFile;

while (remainSize > 0) {

if (remainSize < 1024) {

byteRead = dis.read(part, 0, (int) remainSize);

fos.write(part, 0, (int) remainSize);

} else {

byteRead = dis.read(part);

fos.write(part);

}

remainSize -= byteRead;

dos.write(1);

}

fos.close();

// Hoàn thành việc nhận

Print_Debug("Đã hoàn thành việc nhận");

Print_Debug("----------------------------");

}



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 39



Báo cáo thực hành lập trình mạng



2014



2.3.2 Bên Server

2.3.2.1 Nhận dữ liệu từ Client

Thuật toán:

B1: Nhận tên file. Gửi xác nhận.

B2: Tạo file với tên file đã nhận. Mở luồng ghi.

B3: Nhận kích thước file. Gửi xác nhận.

B4: Lặp khi chưa nhận đủ số byte của file: Đọc dữ liệu vào mảng byte 1024 phần tử

B4.1: Nếu số byte còn lại < 1024:

B4.1.1: Chỉ nhận đúng số lượng byte còn lại từ luồng vào.

B4.1.2: Ghi vào file số byte còn lại.

B4.2: Ngược lại:

B4.2.1: Nhận đủ số byte trong mảng từ luồng vào.

B4.2.2: Ghi vào file số byte vừa nhận.

B4.3: Gửi xác nhận.

B5: Đóng luồng ghi file.

B6: Nhận số giám thị coi thi. Gửi xác nhận.

B7: Nhận số lần đã phân công. Gửi xác nhận.

Cài đặt:

public void ReceiveFile() throws IOException {

long remainSize, sizeFile;

String nameFile;

int byteRead = 0;

// Nhận tên file

nameFile = dis.readUTF();

dos.write(1);

Print_Debug("Tên file: " + nameFile);

// Tạo con trỏ file

file = new File(nameFile);

fos = new FileOutputStream(file);

// Nhận kích thước file

sizeFile = dis.readLong();

dos.write(1);

Print_Debug("Kích thước: " + sizeFile);

// Nhận dữ liệu

remainSize = sizeFile;

while (remainSize > 0) {

if (remainSize < 1024) {

byteRead = dis.read(part, 0, (int) remainSize);

fos.write(part, 0, (int) remainSize);

} else {

byteRead = dis.read(part);

fos.write(part);

}



Page 40



remainSize -= byteRead;

dos.write(1);

}

fos.close();

// Nhận số giám thị coi thi

soGiamThi_CoiThi = dis.readInt();

dos.write(1);

Print_Debug("Số cán bộ coi thi: " + soGiamThi_CoiThi);

// Đọc số lần đã phân công

soLan_PhanCong = dis.readInt();

dos.write(1);

Print_Debug("Số lần phân công: " + soLan_PhanCong);

Print_Debug("----------------------------");

// Hoàn thành việc nhận

Print_Debug("Đã hoàn thành việc nhận");

Print_Debug("----------------------------");



}



2.3.2.2 Truyền dữ liệu cho

Client

Thuật toán:

B1: Truyền tên file qua Server. Chờ nhận phản hồi.

B2: Truyền kích thước file qua Server. Chờ nhận phản hồi.

B4: Mở luồng đọc file.

B3: Đọc file vào mảng 1024 byte cho đến khi hết:

B3.1: Gửi mảng cho Server. Chờ phản hồi.

B4: Đóng luồng đọc file.

Cài đặt:

public void TransFile() throws IOException {

long sizeFile;

fis = new FileInputStream(fileResult);

// Gửi tên file

dos.writeUTF(fileResult.getName());

dis.read();

Print_Debug("Tên file: " + fileResult.getName());

// Gửi kích thước file

sizeFile = fileResult.length();

dos.writeLong(sizeFile);

dis.read();

Print_Debug("Kích thước file: " + sizeFile);

int x;

x = fis.read(part);

// Gửi dữ liệu

while (x > -1) {

dos.write(part);

dis.read();

x = fis.read(part);

}



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 41



Báo cáo thực hành lập trình mạng



// Hồn thành việc gửi

Print_Debug("Đã hồn thành việc gửi");

Print_Debug("----------------------------");

fis.close();



}



2.4 XỬ LÝ CỦA CLIENT

Thuật tốn:

B1: Gửi dữ liệu lên Server.

B2: Chờ hồi đáp kết quả từ Server.

B3: Nếu có kết quả:

B3.1: Nhận dữ liệu trả về từ Server.

B3.2: Ghi số lần đã phân công vào file.

B4: Nếu không, thông báo lỗi.

Cài đặt:

public void run() {

boolean complete = false;

int soLan;

try {



Print_Debug("Gửi file lên server");

TransData();

// Đọc kết quả trả về

Print_Debug("Chờ nhận kết quả");

complete = dis.readBoolean();

Print_Debug("----------------------------");



}



Page 42



if (complete) {

Print_Debug("Server xử lý thành công");

Print_Debug("Nhận kết quả trả về...");

ReceiveFile();

Luu_SoLanPhanCong(++soLanPhanCong);

} else {

Print_Debug("Server xử lý khơng thành cơng");

Print_Debug("----------------------------");

}

Print_Debug("Đóng tất cả kết nối");

Print_Debug("----------------------------");

dis.close();

dos.close();

} catch (IOException e) {}



2014



2.5 XỬ LÝ CỦA SERVER

Thuật toán:

B1: Nhận file từ Client.

B2: Lấy dữ liệu vào và kiểm tra các điều kiện đầu vào.

B3: Nếu các điều kiện đầu vào thỏa:

B3.1: Phân công danh sách.

B3.2: Tạo file kết quả để lưu.

B3.4 Ghi vào file.

B3.5: Thông báo cho Client là đã xử lý xong.

B3.6: Truyền file về cho Client.

B4: Nếu không:

B4.1: Thơng báo cho Client là thất bại.

B5: Đóng các luồng vào ra và socket.

Cài đặt:

public void run() {

try {

Print_Debug("Nhận file từ client");

ReceiveFile();

if (GetData() == true) {

PhanCong();

fileResult = new File("Danh sách phân công.xls");

GhiVaoFile();



}



Print_Debug("Đã xử lý xong");

Print_Debug("----------------------------");

dos.writeBoolean(true);

Print_Debug("Gửi kết quả về cho client");

TransFile();

} else {

dos.writeBoolean(false);

Print_Debug("Server xử lý khơng thành cơng");

Print_Debug("----------------------------");

}

Print_Debug("Đóng tất cả kết nối");

Print_Debug("----------------------------");

socket.close();

dis.close();

dos.close();

} catch (IOException | WriteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 43



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER

Tải bản đầy đủ ngay(0 tr)

×