Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • TCP/IP. Socket

    TCP / IP TCP - протокол передачи данных на IP датаграммах. Проще говоря - IP протокол передает данные, а TCP поверх него управляет и контролирует доставку. Так как сам протокол IP не гарантирует доставку данных, то TCP интерфейс считает отправленные и полученные данные, а в случае потери данных делает необходимое для повторной отправки. Обмен данными по протоколу TCP возможен как между приложениями на одном компьютере, так и между приложениями на разных удаленных компьютерах или устройствах. Именно поэтому он является основой в современном мире передачи данных от встраиваемых систем в локальных сетях до сетей Интернет. Самая известная часть TCP это - Socket, который принято называть - конечной точкой. С простой точки зрения Socket являет собой некий идентификатор, связующим звеном между клиентом и сервером, с помощью которого происходит обмен данными. Socket содержит в себе IP адрес в целом, и номер порта в частности. Каждое приложение, если нужно, способно общаться с внешним миром через свой собственный порт. Если двум одновременно работающим приложениям присвоить одинаковые номера портов - это вызовет конфликт в одном из приложений при попытке использовать уже занятый порт. Рассмотрим простое консольное приложение которое связывается с сервером и читает его страницу. По сути это простой "Клиент" который инициирует общение, отправляет данные (например HTTP запрос) по которым сервер понимает чего от него хотят (например - вернуть веб страницу). Чтоб не загромождать код, в нем упущены условия в случае ошибки, поэтому перед запуском клиента нужно убедиться что сервер работает.

    #define WIN32_LEAN_AND_MEAN
    #include <conio.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include "stdafx.h"
    using namespace std;

    #pragma comment (lib, "Ws2_32.lib")

    #define DEFAULT_BUFLEN 4048
    #define DEFAULT_PORT "80"

    int main()
    {
    WSADATA wsaData;
    SOCKET ConnectSocket = INVALID_SOCKET;
    struct addrinfo *result, hints;
    char sendbuf[] = "GET http://ivarious.xyz HTTP/1.0 \r\n\r\n ";
    char recvbuf[DEFAULT_BUFLEN]=" ";
    int recvbuflen = DEFAULT_BUFLEN;

    WSAStartup(MAKEWORD(2, 2), &wsaData);

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    getaddrinfo("77.222.42.240", DEFAULT_PORT, &hints, &result);

    ConnectSocket = socket(result->ai_family, result->ai_socktype,result->ai_protocol);
    connect(ConnectSocket, result->ai_addr, (int)result->ai_addrlen);
    send(ConnectSocket, sendbuf, sizeof(sendbuf), 0);
    recv(ConnectSocket, recvbuf, DEFAULT_BUFLEN, 0);

    printf("%s", recvbuf);

    closesocket(ConnectSocket);
    WSACleanup();

    _getch();

    return 0;
    }
    WSAStartup(MAKEWORD(2, 2), &wsaData) - инициализация библиотеки TCP.
    struct addrinfo - структура с данными адреса и некоторыми настройками.
    getaddrinfo("77.222.42.240", DEFAULT_PORT, &hints, &result) - обрабатывает строки IP адреса и порта к нужному виду.

    socket(result->ai_family, result->ai_socktype,result->ai_protocol);
    connect(ConnectSocket, result->ai_addr, (int)result->ai_addrlen) - создание и подключение сокета.
    send(ConnectSocket, sendbuf, sizeof(sendbuf), 0) и recv(ConnectSocket, recvbuf, DEFAULT_BUFLEN, 0) соответственно отправка данных (HTTP запрос к серверу) и буфер для текстового ответа от сервера.

    TCP / IP

    Читайте больше в категории: Программирование

    2016-12-24 07:36:37



    Другие статьи:

    Maya. Освещение

    TCP/IP. Socket

    Maya. Extrude по кривой

    PHP. Типовые команды MySQL

    PHP. Передача параметров в ссылке. $_GET

    STM32

    STM32. Программирование на СИ

    STM32. Адресация регистров

    Java. Списки ArrayList и LinkedList

    JavaScript. Объекты