Tải bản đầy đủ (.pdf) (6 trang)

lập trình mạng nguyễn cao đạt bài tập sinhvienzone com

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (74.17 KB, 6 trang )

1. Viết ct chat+gửi file đơn giản (client+server) sử dụng mô hình WSAEventSelect.
Có thể nhập và hiển thị tiếng Việt không dấu. Có quản lý username, password.
Client yêu cầu gửi file theo cú pháp: FILE<Tên File><Nickname>\n. Hiển thị tiến
độ gửi file. Có thể chat và gửi file đồng thời.
Nội dung lưu trong xâu có kiểu wchar_t. Số lượng byte gửi đi = chiều dài xâu*2
Mỗi 1 kết nối phải duy trì 1 buffer, truyền dl theo từng byte và khi gặp dấu \n nó sẽ thực
hiện trọn vẹn 1 câu lệnh ở trong buffer, và đẩy phần còn lại lên đầu buffer.

om

Giao thức TEXT BASED.

2. Thiết kế và cài đặt một giao thức cho phép gửi file và văn bản đồng thời trên một

ne

.C

kết nối TCP.
3. Thiết kế và cài đặt một giao thức cho phép gửi file và văn bản đồng thời trên một
kết nối UDP.

Bài 1: FILE *fp;

Vi

UDP: File<=1500 byte

en

Giao thức: BINARI BASED



Zo

Chia file thành các mẩu nhỏ gửi đi: file file txt file….

nh

Fp = fopen(“A.JPG”,”rb”);

Si

Long long filelen = 0;

Fseek(fp,0,SEEK_END);
Filelen = ftell(fp); // kich thuoc tep tin
Fseek(fp,0,SEEK_SET);
Fread, fwrite
Bài 2:
Typedef struct_PACKET

SinhVienZone.com

/>

{
DWORD

bType;//00: Text, 01: Data, 02: File metadata

DWORD


wLength; //Kich thuoc phan data cua Packet

BYTE

bData[8192];

}

om

Typedef struct_FILE_METADATA

dwFileSize;

BYTE

szFilename[256];

ne

DWORD

.C

{

Zo

}


aPacket;

Vi

PACKET

en

FILE_METADATA;

Gets(szXau);

nh



Si

aPacket.bType = 0;

aPacket.wLeng = strlen(szXau);
memcpy(aPacket.bData,szXau,aPacket.wLength);
Send(s,&aPacket,8+aPacket.wLength,0);
Recv(s,&aPacket,8,MSG_WAITALL);
…..
Recv(s,aPacket.bData,aPacket.wLength,0);

SinhVienZone.com


/>

…..
Gui file metadata
FILE_METADATA

fileMeta;

fileMeta.dwFileSize = 123;

aPacket;

aPacket.bType =2; // File metadata

ne

aPacket.wLength = sizeof(FILE_METADATA);

.C

PACKET

om

strcpy(fileMeta.szFileName,”A.JPG”);

Zo

memcpy(aPacket.bData,&fileMeta,aPacket.wLength);


Vi

en

send(s,&aPacket,8+aPacket.wLength,0);

nh

switch(aPacket.bType)
{

Si

Case 00: // In ra man hinh cau chat;
Break;

Case 01: // ghi du lieu ra file
Break;
Case 02: // Hoi nguoi dung???
}
Bai 3:

SinhVienZone.com

/>

Typedef struct_PACKET
{
bType;//00: Text, 01: Data, 02: File metadata


DWORD

wLength; //Kich thuoc phan data cua Packet

DWORD

dwChecksum;

DWORD

dwOffset; //Offset cua du lieu trong file

BYTE

bData[1400];

om

DWORD

.C

}

ne

Typedef struct_FILE_METADATA

dwFileSize;


BYTE

szFilename[256];

en

DWORD

aPacket;

Si

PACKET

nh

FILE_METADATA;

Vi

}



Zo

{

Gets(szXau);
aPacket.bType = 0;

aPacket.wLeng = strlen(szXau);
memcpy(aPacket.bData,szXau,aPacket.wLength);
Send(s,&aPacket,8+aPacket.wLength,0);

SinhVienZone.com

/>

Recv(s,&aPacket,8,MSG_WAITALL);
…..
Recv(s,aPacket.bData,aPacket.wLength,0);
…..
Gui file metadata
fileMeta;

om

FILE_METADATA
fileMeta.dwFileSize = 123;

ne

aPacket;

aPacket.bType =2; // File metadata

Zo

PACKET


.C

strcpy(fileMeta.szFileName,”A.JPG”);

en

aPacket.wLength = sizeof(FILE_METADATA);

nh

Vi

memcpy(aPacket.bData,&fileMeta,aPacket.wLength);

Si

send(s,&aPacket,8+aPacket.wLength,0);

switch(aPacket.bType)
{
Case 00: // In ra man hinh cau chat;
Break;
Case 01: // ghi du lieu ra file
Break;

SinhVienZone.com

/>

Case 02: // Hoi nguoi dung???

}

Chat: Xin chao

om

“\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00Xin chao”

Si

nh

Vi

en

Zo

ne

.C

Ket hop 2 bai: la su dung 1 socket, sdung ca 2 bai vao trong 1.

SinhVienZone.com

/>



×