CÁC BÀI THỰC HÀNH LINUX - Trang 35

- 34-

int main (int argc, char *argv[]) {


int sd, newSd, cliLen;


struct sockaddr_in cliAddr, servAddr;

char line[MAX_MSG];


/* Gán các giá trị cho đối tượng socket.

Tạo socket cho máy Server. Lưu lại số mô tả socket */

sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd<0) {

perror("cannot open socket ");
return ERROR;

}

/* Đặt tên socket cho chương trình Server
Gán

địa chỉ kết nối cho socket theo giao thức Internet */

servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = htons(SERVER_PORT);

if(bind(sd, (struct sockaddr *) &servAddr, sizeof(servAddr))<0) {
perror("cannot bind port ");

return ERROR;
}


/* Tạo hàng đợi lắng nghe kết nối của client

Cho phép hàng đợi nhận tối đa 5 kết nối */

listen(sd,5);


/* Lặp liên tục chờ và lxy kết nối của client */

while(1) {

printf("%s: waiting for data on port TCP %u\n",argv[0],SERVER_PORT);
cliLen = sizeof(cliAddr);


/* Chấp nhận kết nối */

newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen);
if(newSd<0) {

perror("cannot accept connection ");
return ERROR;

}

/* init line */
memset(line,0x0,MAX_MSG);


/* Đọc dữ liệu do Client gởi đến - xử lý dữ liệu nhận được */

while(read_line(newSd,line)!=ERROR) {

printf("%s: received from %s:TCP%d : %s\n", argv[0], inet_ntoa(cliAddr.sin_addr),

ntohs(cliAddr.sin_port), line);


/* init line */

memset(line,0x0,MAX_MSG);

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.