Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Lập trình socket trong C trên Linux ?

1153 Lượt xem 4 Bình luận 0 Lượt báo xấu
Mình đọc các tài liệu về lập trình socket trong C trên Linux & test thì thấy có 2 cách để viết 1 ctrình client kết nối TCP đến server.

Cách 1:
Code

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8.  
  9. #ifndef HAVE_BZERO
  10. #define bzero(ptr,n)        memset (ptr, 0, n)
  11. #endif
  12.  
  13.  
  14. int main(int argc, char **argv)
  15. {
  16. int sockfd, n;
  17. struct sockaddr_in servaddr;
  18.  
  19. if ((sockfd = socket(AF_INET, SOCK_STREAM,0))<0)
  20. {
  21. printf("ko the mo socket\n");
  22. exit(1);
  23. }
  24.  
  25. bzero(&servaddr,sizeof(servaddr));
  26.  
  27. servaddr.sin_family=AF_INET;
  28. servaddr.sin_port=htons(24000);
  29.  
  30. if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
  31. {
  32. printf("ko the inet_pton\n");
  33. exit(1);
  34. }
  35.  
  36. if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
  37. {
  38. printf("ko the connect den server\n");
  39. exit(1);
  40. }
  41. else
  42. printf("Connect thanh cong\n");
  43.  
  44.  
  45. close(sockfd);
  46.  
  47. return 0;
  48. }
Cách 2 : Cách này thì có thêm 1 chức năng nhỏ là phân giải dns trước khi connect dùng hàm
getaddrinfo
Code:

  1. #include
  2. #include
  3. #include
  4.  
  5. struct addrinfo hints, *res;
  6. int sockfd;
  7.  
  8.  
  9. int main()
  10. {
  11.    memset(&hints, 0, sizeof hints);
  12.    hints.ai_family = AF_UNSPEC;
  13.    hints.ai_socktype = SOCK_STREAM;
  14.  
  15.    getaddrinfo("semtex.labs.pulltheplug.org", "24000", &hints, &res);
  16.  
  17.    sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
  18.  
  19.    connect(sockfd, res->ai_addr, res->ai_addrlen);
  20.  
  21.    return 0;
  22. }
Cả 2 cách đều ok, cách 2 thì ngắn hơn cách 1
Vậy mình thắc mắc là tại sao cùng là connect TCP socket mà lại có 2 cách lận ? chúng có gì khác nhau (ngoài cú pháp) ? cái nào tốt hơn ? vì sao ?
Ai biết xin chỉ giúp.
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

bạn xem thư viện nó dùng có giống nhau không?
#include
#include
#include
chắc là khác
#include
2 Lượt thích

Cả 2 cách giống nhau đều là raw sock.

Cách 2 chẳng qua là đơn giản hóa sử dụng chỉ để lấy thông tin địa chỉ.
Cách 1 là phương pháp cơ bản.
2 Lượt thích

Cho em hỏi, Không thể lập trình socket bằng C trong Windows đc ạ
Lúc em build thì nó hiện ra thiếu các thư viện
Code
  1. #include
  2. #include
  3. #include
1 Lượt thích

Cái ở trên là cho Linux.
Còn Windows thì khác hoàn toàn, sử dụng bộ thư viện WinSock
1 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng