You are on page 1of 7

Báo cáo bài thực hành số 2

Bài 1: Thực hiện việc truyền file text giữa client và server
Gợi ý: Thực hiện việc đọc file text và truyền liên tiếp các ký tự
Code file Sever:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>

int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);

struct sockaddr_in serverAddress;


serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(9002);
serverAddress.sin_addr.s_addr = INADDR_ANY;

bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));

listen(serverSocket, 5);
int clientSocket = accept(serverSocket, NULL, NULL);

char serverResponse[1000];

// Mở file văn bản


int file = open("file.txt", O_RDONLY);
if (file < 0) {
perror("Mở file thất bại");
return 1;
}

// Đọc nội dung từ file


ssize_t bytesRead = read(file, serverResponse, 1000);
if (bytesRead < 0) {
perror("Không đọc được file");
close(file);
return 1;
}

// Gửi nội dung của file đến client


send(clientSocket, serverResponse, bytesRead, 0);
printf("Nội dung file đã được gửi tới client.\n");

close(file);
close(clientSocket);
close(serverSocket);
return 0;
}
Code file client
#include <stdio.h>
#include <stdlib.h>
//for socket and related functions
#include <sys/types.h>
#include <sys/socket.h>
//for including structures which will store information needed
#include <netinet/in.h>
#include <unistd.h>
#define SIZE 1000

int main() {
int socketDescriptor = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddress;

serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(9002);
serverAddress.sin_addr.s_addr = INADDR_ANY;

connect(socketDescriptor, (struct sockaddr*) &serverAddress,


sizeof(serverAddress));
char serverResponse[SIZE];

// Nhận dữ liệu từ server


ssize_t bytesReceived = recv(socketDescriptor, serverResponse, SIZE, 0);
if (bytesReceived < 0) {
close(socketDescriptor);
return 1;
}

// In ra nội dung nhận được từ server


printf("\n%s\n", serverResponse);

close(socketDescriptor);
return 0;
}
Kết quả chạy:
Bài 2: Thực hiện việc truyền tin trên 2 máy trong mạng LAN. Client và Server chạy trên
2 máy tính khác nhau
Gợi ý: Xác định địa chỉ IP và địa chỉ Port của máy tính để cấu hình
Code client:
#include <stdio.h>
#include <stdlib.h>
//for socket and related functions
#include <sys/types.h>
#include <sys/socket.h>
//for including structures which will store information needed
#include <netinet/in.h>
#include <unistd.h>
#define SIZE 1000
int main() {
int socketDescriptor = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddress;

serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(9002);
serverAddress.sin_addr.s_addr = inet_addr("10.10.161.21");
connect(socketDescriptor, (struct sockaddr*) &serverAddress,
sizeof(serverAddress));

char serverResponse[SIZE];

// Nhận dữ liệu từ server


ssize_t bytesReceived = recv(socketDescriptor, serverResponse, SIZE, 0);
if (bytesReceived < 0) {
close(socketDescriptor);
return 1;
}

// In ra nội dung nhận được từ server


printf("\n%s\n", serverResponse);

You might also like