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 */

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.