C++でソケット通信を行う方法について説明します。
Windowsでソケット通信を行う場合、WinSock APIを利用します。
WinSock APIを利用するには、以下の作業が必要になります。
 ・リンカにws2_32.libをインポートする。
 ・ヘッダファイル(winsock2.h)をインクルードする。

以下、サンプル。
(Visual C++ 2008を利用する場合を想定しています)
《事前準備》
サーバ用とクライアント用に2つのプロジェクトを用意する必要があります。
以下の1〜3の操作を各プロジェクトで行ってください。

1.新規に[空のプロジェクト]を追加する。
2.ソースファイルを追加する。
 1)[プロジェクト]-[新規項目の追加][C++ファイル(.cpp)]を選択する。
3.リンカにソケット通信用のライブラリを追加する。
 1)[プロジェクト]-[xxxのプロパティ]を選択する。
  ※xxxには、プロジェクト名が入ります。
 2)画面左側のツリーから[構成プロパティ]-[リンカ]-[コマンドライン]を選択する。
 3)追加のオプションに以下を追加する。
    ws2_32.lib


《コード》
--<サーバ用プログラム>--
#include <stdio.h>
#include <winsock2.h>

int main(int argc, char* argv[]){
SOCKET s, s1; //ソケット
int result; //戻り値
//接続を許可するクライアント端末の情報
struct sockaddr_in source;
char buffer[1024]; //受信データのバッファ領域
char ans[] = "送信成功";
char ret;

memset(&buffer, '\0', sizeof(buffer));
//送信元の端末情報を登録する
memset(&source, 0, sizeof(source));
source.sin_family = AF_INET;
//ポート番号はクライアントプログラムと共通
source.sin_port = htons(7000);
source.sin_addr.s_addr = htonl(INADDR_ANY);

//ソケット通信の開始準備
WSADATA data;
result = WSAStartup(MAKEWORD(2, 0), &data);
if (result < 0){
printf("%d\n", GetLastError());
printf("ソケット通信準備エラー\n");
}

//ソケットの生成
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s < 0){
printf("%d\n", GetLastError());
printf("ソケット生成エラー\n");
}

//ソケットのバインド
result = bind(s, (struct sockaddr *)&source, sizeof(source));
if (result < 0){
printf("%d\n", GetLastError());
printf("バインドエラー\n");
}

//接続の許可
result = listen(s, 1);
if (result < 0){
printf("接続許可エラー\n");
}

printf("接続開始\n");

//クライアントから通信があるまで待機
s1 = accept(s, NULL, NULL);
if (s1 < 0){
printf("待機エラー\n");
}

//クライアントから送信されたデータの受信
result = recv(s1, buffer, 10, 0);
if (result < 0){
printf("受信エラー\n");
}
printf("%sを受信しました", buffer);

//クライアントへデータを送信する
result = send(s1, ans, 10, 0);

printf("接続終了\n");
closesocket(s1);

//ソケット通信の終了
WSACleanup();

printf("何かキーを押して下さい\n");
scanf("%c", &ret);

return 0;
}

--<クライアント用プログラム>--
#include <stdio.h>
#include <winsock2.h>

int main(void){
SOCKET s; //ソケット
//接続するサーバの情報
struct sockaddr_in dest;
//接続するサーバのIPアドレス
//xxx.xxx.xxx.xxxの形式で指定する

char destination[] = "192.168.1.1";

char buffer[1024];

//ソケット通信の準備
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);

//接続先(サーバ)のアドレス情報を設定
memset(&dest, 0, sizeof(dest));
//ポート番号はサーバプログラムと共通
dest.sin_port = htons(7000);
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(destination);

//ソケットの生成
s = socket(AF_INET, SOCK_STREAM, 0);

//サーバへの接続
if(connect(s, (struct sockaddr *) &dest, sizeof(dest))){
printf("%sに接続できませんでした\n", destination);
return -1;
}
printf("%sに接続しました\n", destination);

printf("サーバに送信する文字列を入力して下さい\n");
scanf("%s", buffer);

//サーバにデータを送信
send(s, buffer, sizeof(buffer), 0);

//サーバからデータを受信
recv(s, buffer, 1024, 0);
printf("→ %s\n\n", buffer);

// Windows でのソケットの終了
closesocket(s);
WSACleanup();

return 0;
}

【補足事項】
・UNIX系のOS(Linux含む)の場合、インクルードするヘッダファイルが異なります。
 →<sys/socket.h>をインクルードする必要があります。
・WinSockを利用する場合、最初にWSAStartup()関数を呼び出します。
 この関数を利用することにより、利用するWinSockのバージョンとWinSockの情報を取得できます。
  int WSAStartup (WORD wVersionRequested , LPWSADATA lpWSAData);

 ・第1引数は、利用するWinSockのバージョンを指定します。
  WORDの上位バイトがマイナーバージョン、下位バイトがメジャーバージョンです。
 ・第2引数は、WinSockの情報を得るためのWSDATA構造体へのポインタを指定します。
 また、ソケット通信を終わりにする場合、WSACleanup()関数を呼び出します。
・WSAStartup()関数を呼び出さずにソケット通信を開始すると、バインド時にエラーが発生します。
 →GetLastError()でエラー番号を取得できます。