G2A Many GEOs
SHARE
TWEET

Untitled

a guest Apr 10th, 2020 128 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //#include "pch.h"
  2. #define WIN32_LEAN_AND_MEAN
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <windows.h>
  5. #include <winsock2.h>
  6. #include <ws2tcpip.h>
  7. // Директива линковщику: использовать библиотеку сокетов
  8. #pragma comment(lib, "ws2_32.lib")
  9.  
  10. #include <iostream>
  11. #include <fstream>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <string>
  16. #define WEBHOST "google.com"
  17.  
  18. using namespace std;
  19. //Оставим эти штучки из методы, вроде полезные
  20. int init()
  21. {
  22.     WSADATA wsa_data;
  23.     return (0 == WSAStartup(MAKEWORD(2, 2), &wsa_data));
  24. }
  25. int sock_err(const char* function, int s)
  26. {
  27.     int err;
  28.     err = WSAGetLastError();
  29.     fprintf(stderr, "%s: socket error: %d\n", function, err);
  30.     return -1;
  31. }
  32.  
  33. // Функция определяет IP-адрес узла по его имени.
  34. // Адрес возвращается в сетевом порядке байтов.
  35. unsigned int get_host_ipn(const char* name)
  36. {
  37.     struct addrinfo* addr = 0;
  38.     unsigned int ip4addr = 0;
  39.     // Функция возвращает все адреса указанного хоста
  40.     // в виде динамического однонаправленного списка
  41.     if (0 == getaddrinfo(name, 0, 0, &addr))
  42.     {
  43.         struct addrinfo* cur = addr;
  44.         while (cur)
  45.         {
  46.             // Интересует только IPv4 адрес, если их несколько - то первый
  47.             if (cur->ai_family == AF_INET)
  48.             {
  49.                 ip4addr = ((struct sockaddr_in*) cur->ai_addr)->sin_addr.s_addr;
  50.                 break;
  51.             }
  52.             cur = cur->ai_next;
  53.         }
  54.         freeaddrinfo(addr);
  55.     }
  56.     return ip4addr;
  57. }
  58.  
  59. char* get_info(int* port, char* input_string)
  60. {
  61.     char* ip, * num;
  62.     ip = strtok(input_string, ":");
  63.     num = strtok(NULL, " ");
  64.     *port = atoi(num);
  65.     return ip;
  66. }
  67.  
  68. int main(int argc, char* argv[])
  69. {
  70.     int s;
  71.     struct sockaddr_in addr;
  72.     FILE* f;
  73.  
  74.     if (argc != 3) { //Т.к. у нас только три аргумента - адрес, порт и имя файла
  75.         cout << "Incorrect input\n";
  76.         return 0;
  77.     }
  78.  
  79.     init(); // Инициалиазация сетевой библиотеки
  80.     s = socket(AF_INET, SOCK_STREAM, 0); // Создание TCP-сокета
  81.     if (s < 0) return sock_err("socket", s);
  82.  
  83.     int port; char* ip;
  84.     ip = get_info(&port, argv[1]);
  85.  
  86.     // Заполнение структуры с адресом удаленного узла
  87.     memset(&addr, 0, sizeof(addr));
  88.     addr.sin_family = AF_INET; //Семейство протоколов AF_INET
  89.     addr.sin_port = htons(port); //номер порта
  90.     addr.sin_addr.s_addr = get_host_ipn(ip); // IP адрес
  91.  
  92.     // Установка соединения
  93.     int attempt = 10;
  94.     while (connect(s, (struct sockaddr*) & addr, sizeof(addr)) != 0) {
  95.         Sleep(100);
  96.         attempt--;
  97.         if (!attempt) {
  98.             closesocket(s);
  99.             return sock_err("connect", s);
  100.         }
  101.     }
  102.     //Отправка "put" на сервер по байтам
  103.     char put; int ch;
  104.     put = 'p'; ch = send(s, &put, 1, 0);
  105.     put = 'u'; ch = send(s, &put, 1, 0);
  106.     put = 't'; ch = send(s, &put, 1, 0);
  107.  
  108.     ifstream file;
  109.     file.open(argv[2]);
  110.     if (!file) {
  111.         cout << "Error! File don't open\n";
  112.         return -1;
  113.     }
  114.     int count = 0;
  115.     while (!file.eof()) {
  116.         count++;
  117.         string message;
  118.         getline(file, message);
  119.         if (!message.empty()) {
  120.             char* ch_message = new char[message.length() + 1];
  121.             strcpy(ch_message, message.c_str());
  122.            
  123.  
  124.             short int num1;
  125.             int num2;
  126.             char* h, * m, * sec;
  127.             char* Mes;
  128.             num1 = atoi(strtok(ch_message, " "));
  129.             num2 = atoi(strtok(NULL, " "));
  130.             h = strtok(NULL, ":");
  131.             m = strtok(NULL, ":");
  132.             sec = strtok(NULL, " ");
  133.             Mes = strtok(NULL, "\n");
  134.  
  135.             unsigned int msgg; //Номер сообщения - 4х байтовое значение, т.е. msgg должен быть unsigned int
  136.             short int mes;
  137.             char* str = new char[4];
  138.             msgg = htonl(count); //Номер сообщения
  139.             memcpy(str, &msgg, 4);
  140.             send(s, str, 4, 0);
  141.  
  142.             mes = htons(num1); //Значение AA
  143.             memcpy(str, &mes, 2);
  144.             send(s, str, 2, 0);
  145.  
  146.             msgg = htonl(num2); //Значение ВВВ
  147.             memcpy(str, &msgg, 4);
  148.             send(s, str, 4, 0);
  149.  
  150.             send(s, h, 1, 0);
  151.             send(s, m, 1, 0);
  152.             send(s, sec, 1, 0);
  153.  
  154.             unsigned int len = strlen(Mes);
  155.             msgg = htonl(len);
  156.             memcpy(str, &msgg, 4);
  157.             send(s, str, 4, 0);
  158.  
  159.             send(s, Mes, strlen(Mes), 0); //Сообщение
  160.             send(s, "\0", 1, 0);
  161.  
  162.             char* buf = new char[3];
  163.             recv(s, buf, 2, 0);
  164.             buf[2] = 0;
  165.             if (strcmp(buf, "ok") != 0)
  166.                 cout << "Message" << count << "dont't send";
  167.         }
  168.     }
  169.     file.close();
  170.     closesocket(s); //Закрытие соединения
  171.     WSACleanup();
  172.     return 0;
  173. }
RAW Paste Data
Ledger Nano X - The secure hardware wallet
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top