Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include "pch.h"
- #define WIN32_LEAN_AND_MEAN
- #define _CRT_SECURE_NO_WARNINGS
- #include <windows.h>
- #include <winsock2.h>
- #include <ws2tcpip.h>
- // Директива линковщику: использовать библиотеку сокетов
- #pragma comment(lib, "ws2_32.lib")
- #include <iostream>
- #include <fstream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <string>
- #define WEBHOST "google.com"
- using namespace std;
- //Оставим эти штучки из методы, вроде полезные
- int init()
- {
- WSADATA wsa_data;
- return (0 == WSAStartup(MAKEWORD(2, 2), &wsa_data));
- }
- int sock_err(const char* function, int s)
- {
- int err;
- err = WSAGetLastError();
- fprintf(stderr, "%s: socket error: %d\n", function, err);
- return -1;
- }
- // Функция определяет IP-адрес узла по его имени.
- // Адрес возвращается в сетевом порядке байтов.
- unsigned int get_host_ipn(const char* name)
- {
- struct addrinfo* addr = 0;
- unsigned int ip4addr = 0;
- // Функция возвращает все адреса указанного хоста
- // в виде динамического однонаправленного списка
- if (0 == getaddrinfo(name, 0, 0, &addr))
- {
- struct addrinfo* cur = addr;
- while (cur)
- {
- // Интересует только IPv4 адрес, если их несколько - то первый
- if (cur->ai_family == AF_INET)
- {
- ip4addr = ((struct sockaddr_in*) cur->ai_addr)->sin_addr.s_addr;
- break;
- }
- cur = cur->ai_next;
- }
- freeaddrinfo(addr);
- }
- return ip4addr;
- }
- char* get_info(int* port, char* input_string)
- {
- char* ip, * num;
- ip = strtok(input_string, ":");
- num = strtok(NULL, " ");
- *port = atoi(num);
- return ip;
- }
- int main(int argc, char* argv[])
- {
- int s;
- struct sockaddr_in addr;
- FILE* f;
- if (argc != 3) { //Т.к. у нас только три аргумента - адрес, порт и имя файла
- cout << "Incorrect input\n";
- return 0;
- }
- init(); // Инициалиазация сетевой библиотеки
- s = socket(AF_INET, SOCK_STREAM, 0); // Создание TCP-сокета
- if (s < 0) return sock_err("socket", s);
- int port; char* ip;
- ip = get_info(&port, argv[1]);
- // Заполнение структуры с адресом удаленного узла
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET; //Семейство протоколов AF_INET
- addr.sin_port = htons(port); //номер порта
- addr.sin_addr.s_addr = get_host_ipn(ip); // IP адрес
- // Установка соединения
- int attempt = 10;
- while (connect(s, (struct sockaddr*) & addr, sizeof(addr)) != 0) {
- Sleep(100);
- attempt--;
- if (!attempt) {
- closesocket(s);
- return sock_err("connect", s);
- }
- }
- //Отправка "put" на сервер по байтам
- char put; int ch;
- put = 'p'; ch = send(s, &put, 1, 0);
- put = 'u'; ch = send(s, &put, 1, 0);
- put = 't'; ch = send(s, &put, 1, 0);
- ifstream file;
- file.open(argv[2]);
- if (!file) {
- cout << "Error! File don't open\n";
- return -1;
- }
- int count = 0;
- while (!file.eof()) {
- count++;
- string message;
- getline(file, message);
- if (!message.empty()) {
- char* ch_message = new char[message.length() + 1];
- strcpy(ch_message, message.c_str());
- short int num1;
- int num2;
- char* h, * m, * sec;
- char* Mes;
- num1 = atoi(strtok(ch_message, " "));
- num2 = atoi(strtok(NULL, " "));
- h = strtok(NULL, ":");
- m = strtok(NULL, ":");
- sec = strtok(NULL, " ");
- Mes = strtok(NULL, "\n");
- unsigned int msgg; //Номер сообщения - 4х байтовое значение, т.е. msgg должен быть unsigned int
- short int mes;
- char* str = new char[4];
- msgg = htonl(count); //Номер сообщения
- memcpy(str, &msgg, 4);
- send(s, str, 4, 0);
- mes = htons(num1); //Значение AA
- memcpy(str, &mes, 2);
- send(s, str, 2, 0);
- msgg = htonl(num2); //Значение ВВВ
- memcpy(str, &msgg, 4);
- send(s, str, 4, 0);
- send(s, h, 1, 0);
- send(s, m, 1, 0);
- send(s, sec, 1, 0);
- unsigned int len = strlen(Mes);
- msgg = htonl(len);
- memcpy(str, &msgg, 4);
- send(s, str, 4, 0);
- send(s, Mes, strlen(Mes), 0); //Сообщение
- send(s, "\0", 1, 0);
- char* buf = new char[3];
- recv(s, buf, 2, 0);
- buf[2] = 0;
- if (strcmp(buf, "ok") != 0)
- cout << "Message" << count << "dont't send";
- }
- }
- file.close();
- closesocket(s); //Закрытие соединения
- WSACleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement