Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба14.doc
Скачиваний:
9
Добавлен:
12.11.2019
Размер:
572.93 Кб
Скачать

9.Клиент неблокирующих сокетов с использованием функции select

#include <windows.h>

#include <winsock.h>

#include <conio.h>

#include <stdio.h>

#define SERV_PORT 5000

// Сокет клиента

SOCKET srv_socket;

// Локальный сокет

SOCKADDR_IN local_sin;

// Адрес сервера

SOCKADDR_IN dest_sin;

int main ()

{

int rc;

WSADATA WSAData;

char szTemp[128];

// Инициализация и проверка версии Windows Sockets

rc = WSAStartup(MAKEWORD(1, 1), &WSAData);

if(rc != 0)

{

//MessageBox(NULL, "WSAStartup Error", "Error", MB_OK);

printf("\nWSAStartup Error\n");

getch();

return FALSE;

}

// Отображаем описание и версию системы Windows Sockets

printf("\nServer initialization...\n");

wsprintf(szTemp, "Server use %s %s",

WSAData.szDescription,WSAData.szSystemStatus);

printf("%s\n",szTemp);

PHOSTENT phe;

// Создаем сокет

srv_socket = socket(AF_INET, SOCK_STREAM, 0);

if(srv_socket == INVALID_SOCKET)

{

//MessageBox(NULL, "socket Error", "Error", MB_OK);

printf("\nsocket Error \n");

getch();

return;

}

printf("\nSocket is created.\n");

dest_sin.sin_family = AF_INET;

dest_sin.sin_addr.s_addr = INADDR_ANY;

dest_sin.sin_port = 0;

// Связываем адрес IP с сокетом

if(bind(srv_socket, (LPSOCKADDR)&dest_sin,

sizeof(dest_sin)) == SOCKET_ERROR)

{

// При ошибке закрываем сокет

closesocket(srv_socket);

printf("\nbind Error.\n");

getch();

//MessageBox(NULL, "bind Error", "Error", MB_OK);

return;

}

printf("\nSocket is binded.\n");

// Устанавливаем адрес IP и номер порта

dest_sin.sin_family = AF_INET;

// Определяем адрес узла

printf("\nGetting remote host adress.\n");

// Адрес локального узла для отладки

phe = gethostbyname("localhost");

// Адрес удаленного узла

//phe = gethostbyname("maxsinev");

if(phe == NULL)

{

closesocket(srv_socket);

printf("\ngethostbyname Error\n");

getch();

//MessageBox(NULL, "gethostbyname Error", "Error", MB_OK);

return;

}

// Копируем адрес узла

memcpy((char FAR *)&(dest_sin.sin_addr), phe->h_addr,

phe->h_length);

// Другой способ указания адреса узла

// dest_sin.sin_addr.s_addr = inet_addr("200.200.200.201");

// Копируем номер порта

dest_sin.sin_port = htons(SERV_PORT);

getch();

// Устанавливаем соединение

printf("\nConnecting to remote host ...\n");

if(connect(srv_socket, (PSOCKADDR)&dest_sin,

sizeof(dest_sin)) < 0)

{

closesocket(srv_socket);

printf("\n connect Error\n");

//MessageBox(NULL, "connect Error", "Error", MB_OK);

return;

}

char szBuf[80];

lstrcpy(szBuf, "Test string");

// Посылаем сообщение

printf("\nSending message to server ... \n");

send(srv_socket, szBuf, lstrlen(szBuf), 0);

//getch();

printf("\nReceiving message from server ...\n");

rc = recv((SOCKET)srv_socket, szTemp, 256, 0);

if(rc)

{

szTemp[rc] = '\0';

printf("\nMessage from server: %s\n",szTemp);

getch();

//MessageBox(NULL, szTemp, "Reсeived data", MB_OK);

}

printf("\nCleanup ...");

// Освобождение ресурсов, полученных для

// работы с Windows Sockets

WSACleanup();

return;

}

Приложение 10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]