Nếu là trên linux, việc sử dụng thư viện socket, nhưng ở windows bạn sẽ cần sử dụng thư viện winsock.

Để sử dụng được winsock2 bạn cần include thư viện winsock2.h bằng lệnh #include <winsock2.h>

Sau đây Dr có một ví dụ rất đơn giản như sau: (bạn cũng có thể tìm thấy ví dụ này trên MSDN)

C Code:
  1. #include <winsock2.h>
  2. //#include <ws2tcpip.h>
  3. #include <stdio.h>
  4.  
  5. int __cdecl main()
  6. {
  7.  
  8.     WORD wVersionRequested;
  9.     WSADATA wsaData;
  10.     int err;
  11.  
  12.     /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
  13.     wVersionRequested = MAKEWORD(2, 2);
  14.  
  15.     err = WSAStartup(wVersionRequested, &wsaData);
  16.     if (err != 0) {
  17.         /* Tell the user that we could not find a usable */
  18.         /* Winsock DLL.                                  */
  19.         printf("WSAStartup failed with error: %d\n", err);
  20.         return 1;
  21.     }
  22.  
  23. /* Confirm that the WinSock DLL supports 2.2.*/
  24. /* Note that if the DLL supports versions greater    */
  25. /* than 2.2 in addition to 2.2, it will still return */
  26. /* 2.2 in wVersion since that is the version we      */
  27. /* requested.                                        */
  28.  
  29.     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
  30.         /* Tell the user that we could not find a usable */
  31.         /* WinSock DLL.                                  */
  32.         printf("Could not find a usable version of Winsock.dll\n");
  33.         WSACleanup();
  34.         return 1;
  35.     }
  36.     else
  37.         printf("The Winsock 2.2 dll was found okay\n");
  38.  
  39.  
  40. /* The Winsock DLL is acceptable. Proceed to use it. */
  41.  
  42. /* Add network programming using Winsock here */
  43.  
  44. /* then call WSACleanup when down using the Winsock dll */
  45.  
  46.     WSACleanup();
  47.  
  48. }

Và bây giờ bạn có thể đưa vào một trình biên dịch nào đó để bắt đầu run và kiểm tra kết quả. Thế nào đây, nó là một loại lỗi xảy ra tại các function kiểu WSA*. Vậy cách khắc phục là gì?

Nếu bạn đang xây dựng ứng dụng với Visual C++ thì bạn chỉ cần khai báo các thư viện đúng như sau, winsock sẽ chạy được.

C Code:
  1. #include "stdafx.h"
  2. #include "ip2.h"
  3. #include "ip2Dlg.h"
  4. #include "winsock2.h" // this header file should follow others!

Nhưng nếu bạn compile với một compiler khác chẳng hạn như gcc, thì bạn không thể làm thế được. Dr đã tìm kiếm và nhận thấy là để có thể thực thi được thư viện winsock bạn cần đến thư viện ws2_32. Thật tuyệt vời cho kiết quả này, bây giờ bạn chỉ cần thêm nó vào khi bạn tiến hành linking là được rồi. Sau đây là hướng dẫn chi tiết:

- Nếu bạn compile chương trình bằng commandline thì thêm vào option: -lws2_32.
- Nếu là compile chương trình với DEV C++ thì chonk Tools->Compiler Options và thêm vào đó options này: -lws2_32.

- Vừa rồi Dr có giới thiệu sử dụng Eclipse với CDT để viết code C/C++ vậy sử lý nó thế nào trong trường hợp này? Rất đơn giản, bạn lựa chọn Project mà bạn có sử dụng WinSock, sau đó chọn Projects-> Properties-> C/C++ Build -> tiếp đó bạn chọn phần Setting. Nếu bạn sử dụng MinGW, thì chọn MinGW C/C++ linker (Các thứ khác tương tự). Trong phần Libraries(-l), nhấn vào biểu tượng Add, sau đó thêm vào chỉ ws2_32 (Tức không có -l phía trước). Bây giờ hãy Chọn Projects-> Clean..., sau đó run lại.

Như vậy, với hướng dẫn trên các bạn hoàn toàn có thể sử dụng thành công thư viện winsock mà không có bất cứ một trở ngại nào nữa.

Chúc các bạn thành công!