Mình có 1 để bài như thế này :
Viết chương trình mô phỏng Client/server trên 2 máy khác nhau.Client gửi cho server một dòng lệnh và server thực thi dòng lệnh đó.Nếu thành công thì thông báo lại cho Client.
Mình đã viết demo 2 chương trình đó như sau:
Code:
//chuong trinh Client
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define MYPORT 5544;
int main ()
{
//Khai bao cac bien
int sockfd;
int len;
struct sockaddr_in address;
int result;
char *command;
//khoi tao socket cho Client
sockfd = socket(AF_INET,SOCK_STREAM,0);
address.sin_family = AF_INET;
address.sin_port = MYPORT;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
len = sizeof(address);
printf("Nhap vao command ban muon thuc hien tren Server:\n");
scanf("%s",&command);
result = connect(sockfd,(struct sockaddr *)&address,len);
if(result == -1){
perror("oops:Client problem");
}
send(sockfd,command,sizeof(command),0);
close(sockfd);
}
Chuong trinh Server
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MYPORT 5544
main ()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
char buffer[512];
//khoi tao socket
server_sockfd = socket(AF_INET,SOCK_STREAM,0);
//thong bao loi neu khoi tao socket khong thanh cong
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = MYPORT;
server_len = sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
//lang nghe ket noi tu Client
listen(server_sockfd,5);
while(1) {
printf("server waiting\n");
int byte_count;
client_sockfd = accept(server_sockfd,(struct sockaddr
*)&client_address,&client_len);
//nhan message tu Client
byte_count = recv(server_sockfd,buffer,sizeof buffer,0);
printf("Da nhan duoc %d bytes tu Client",byte_count);
printf("Client yeu cau Server thuc hien Command sau: %s",buffer);
system(buffer);
close(client_sockfd);
}
}
Client và Server thì thấy nhau đc còn lệnh command thì nó ko thể thực hiện đc.Mình vẫn chưa rõ lắm về hàm system().Các pro chỉ giáo thêm cho mình với.
CHƯƠNG TRÌNH NÀY CHẠY TRÊN LINUX!
Bookmarks