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

- 32-

/* Khai báo các file thư viện cần thiết để gọi hàm socket*/


#include <sys/types.h>

#include <sys/socket.h>
#include <netinet/in.h>

/*gethostbyname*/

#include <arpa/inet.h>
#include <netdb.h>

#include <stdio.h>
#include <unistd.h>

/* close */


#define SERVER_PORT 1500

#define MAX_MSG 100

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

/* Khởi tạo các biến dùng trong chương trình */
int sd, rc, i;

struct sockaddr_in localAddr, servAddr;
struct hostent *h;


if(argc < 3) {

printf("usage: %s <IPserver> <data1> <data2> ... <dataN>\n",argv[0]);
exit(1);

}

/* Hàm gethostbyname() lấy về địa chỉ IP theo tên nhập vào trong tập tin /etc/hosts */

h = gethostbyname(argv[1]);

if(h==NULL) {

printf("%s: unknown host '%s'\n",argv[0],argv[1]);
exit(1);

}

servAddr.sin_family = h->h_addrtype;
memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);

servAddr.sin_port = htons(SERVER_PORT);

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

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


sd = socket(AF_INET, SOCK_STREAM, 0);

if(sd<0) {
perror("cannot open socket ");

exit(1);
}


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

Gán

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

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

localAddr.sin_port = htons(0);

/* Hàm htons() dùng để chuyển đổi trật tự byte của số nguyên trước khi gởi đi – do hệ
thống sử dụng cơ chế giao tiếp TCP/IP */


/* Ràng buộc tên với socket */