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

- 38-

#include <string.h> /* memset() */


#define LOCAL_SERVER_PORT 1500

#define MAX_MSG 100

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

int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;

char msg[MAX_MSG];

/* Tạo socket trên máy Server - Đặt tên cho socket của chương trình Server */

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

printf("%s: cannot open socket \n",argv[0]);
exit(1);

}

/* bind local server port – ràng buộc tên với socket */

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

servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));


if(rc<0) {

printf("%s: cannot bind port number %d \n", argv[0], LOCAL_SERVER_PORT);
exit(1);

}

printf("%s: waiting for data on port UDP %u\n", argv[0],LOCAL_SERVER_PORT);

/* Thực hiện vòng lặp vô hạn trên Server để chờ và xử lý kết nối đến từ máy client */
while(1) {


/* Khởi tạo bộ đệm */

memset(msg,0x0,MAX_MSG);

/* Nhận dữ liệu gởi đến từ client */
cliLen = sizeof(cliAddr);

n = recvfrom(sd, msg, MAX_MSG, 0, (struct sockaddr *) &cliAddr, &cliLen);

if(n<0) {
printf("%s: cannot receive data \n",argv[0]);

continue;
}


/* In dữ liệu nhận được */

printf("%s: from %s:UDP%u : %s \n", argv[0],inet_ntoa(cliAddr.sin_addr),

ntohs(cliAddr.sin_port),msg);


}/*while*/

return 0;
}

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.