Рассмотрим процедуру установки канала связи со стороны клиента, использованную нами в приложении CLIENT, исходные тексты которого будут приведены ниже.
Для установки соединения в приложении используется функция SetConnection:
SOCKADDR _IN dest_sin;
void SetConnection(HWND hWnd)
{
PHOSTENT phe;
// Создаем сокет
srv_socket = socket(AF_INET, SOCK_STREAM, 0);
if(srv_socket == INVALID_SOCKET)
{
MessageBox(NULL, "socket Error", "Error", MB_OK);
return;
}
// Устанавливаем адрес IP и номер порта
dest_sin.sin_family = AF_INET;
// Определяем адрес узла
phe = gethostbyname ("localhost ");
if(phe == NULL)
{
closesocket (srv_socket);
MessageBox(NULL, "gethostbyname Error", "Error", MB_OK);
return;
}
// Копируем адрес узла
memcpy((char FAR *)&(dest_sin.sin_addr), phe->h_addr,
phe->h_length);
// Копируем номер порта
dest_sin.sin_port = htons(SERV_PORT);
// Устанавливаем соединение
if(connect(srv_socket, (PSOCKADDR)&dest_sin,
sizeof(dest_sin)) < 0)
{
closesocket (srv_socket);
MessageBox(NULL, "connect Error", "Error", MB_OK);
return;
}
}
Вначале с помощью функции socket эта функция создает сокет. Затем выполняется заполнение адресной информацией структуры dest_sin.
Обратите внимание, что для получения адреса IP мы воспользовались функцией gethostbyname, указав ей имя узла localhost.
|
|
Это имя отображается в файле HOSTS на адрес 127.0.0.1:
localhost
Адрес 127.0.0.1 является локальным. Вы можете использовать его для тестирования приложений, выполняющих обмен данными при помощи протокола TCP/IP, запуская сервер и клиент на одном и том же компьютере.
После заполнения структуры с адресной информацией функция connect создает канал связи с сервером.