Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.08.2016
Сообщений: 11

Ошибка: "Сделана попытка выполнить операцию на объекте, не являющемся сокетом."

24.11.2016, 04:47. Показов 3994. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Имеется сервер и клиент. Нужно с клиента переслать бинарный файл на сервер и исполнить его.
Файл открывается в бинарном режиме, читает в буфер, делает send. Сервер делает recv и из буфера записывает в файл, потом переименовывает.
Пытаюсь переслать и получаю ошибку: "Сделана попытка выполнить операцию на объекте, не являющемся сокетом."

сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#include <locale.h>
#include <string>
 
#pragma comment(lib, "Ws2_32.lib")
 
#define PORT 6091
 
void getError(DWORD errCode) 
   {
   char* error; 
   FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      errCode != 0 ? errCode : WSAGetLastError(),
      MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT),
      error,
      sizeof(error),
      NULL);  
   printf("\nОшибка: %s\n", error); 
   getchar();
   }
 
int main()
   {
    setlocale(LC_ALL, "Russian");
    
   WSADATA winsock;
   if (FAILED(WSAStartup(MAKEWORD(1, 1), &winsock)))
   {
       DWORD error = WSAGetLastError();
       getError(error);
       return -1;
   }
   SOCKET sock, sub;
   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (sock == INVALID_SOCKET)
   {
       DWORD error = WSAGetLastError();
       getError(error);
       return -2;
   }
   sockaddr_in addr;
   
   sockaddr_in incomingAddress;
   int addressLen = sizeof(incomingAddress);
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
   addr.sin_port = htons(PORT);
   addr.sin_addr.s_addr = inet_addr("127.0.0.1");
   if (bind(sock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) 
   {
       DWORD error = WSAGetLastError();
       getError(error);
       return -3;
   }
 
  if (listen(sock, SOMAXCONN) == SOCKET_ERROR) 
  {
      DWORD error = WSAGetLastError();
       getError(error);
       return -4;
   }
  char buffer[200];
  FILE * prin_file;
  std::string fname = "file" + std::to_string(rand() % 1000) + ".exe";
  char new_name[20];
  memset(new_name, 0, sizeof(fname));
  strncpy(new_name, fname.c_str(), sizeof(new_name) - 1);
  prin_file = fopen(new_name, "wb");
   printf("Ожидание подключения\n");
   for (;;)
   {
       sub = accept(sock, (sockaddr*)&incomingAddress, &addressLen);
       if (sub != INVALID_SOCKET)
       {
           printf("Клиент подключен!\n");
           for (;;) {
               int recv_chars = recv(sub, buffer, 200, 0);
               if (recv_chars > 0)
               {
                   printf("Получено байт: %d\n", recv_chars);
                   fwrite(buffer, 5, 200, prin_file);
               } 
               else if (recv_chars == 0)
               {       
                printf("Соединение закрыто\n");
                
                break;
           }  else if (recv_chars == SOCKET_ERROR)
               {
                   DWORD error = WSAGetLastError();
                   getError(error);
                   return -5;
                   break;
               }
           }    
       } 
   }
   fclose(prin_file);
 
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   memset(&si, 0, sizeof(si));
   memset(&pi, 0, sizeof(si));
   if(!CreateProcess((LPCSTR)prin_file, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))
   {
       DWORD error = WSAGetLastError();
       getError(error);
       return -6;
   }
   closesocket(sub);
   closesocket(sock);
   WSACleanup();
   return 0;
}
клиент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#include <locale.h>
#include <string>
 
#pragma comment(lib, "Ws2_32.lib")
 
#define PORT 6091
 
void getError(DWORD errCode)
   {
   char error[1000]; 
   FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 
                 NULL, 
                 WSAGetLastError(), 
                 MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), 
                 error, sizeof(error), NULL); 
   printf("\nОшибка: %s\n", error); 
   getchar();
   }
 
int main(int argc, char *argv[])
{
 
    setlocale(LC_ALL, "Russian");
 
    WSADATA winsock;
    SOCKET sock;
    if ((WSAStartup(MAKEWORD(2, 0), &winsock))!=NO_ERROR)
    {
        DWORD error = WSAGetLastError();
        getError(error);
        return -1;
    }
 
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sock == INVALID_SOCKET)
    {
        DWORD error = WSAGetLastError();
        getError(error);
        return -2;
    }
 
    sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = htons(PORT);
 
    if (connect(sock, (sockaddr*)&addr, sizeof(addr)) != 0)
    {
        DWORD error = WSAGetLastError();
        getError(error);
        return -3;
    }
 
    printf("Подключение успешно !\n");
    printf("Посылаю файл .. \n");
 
    FILE *otpr_file;
    char buff[200];
    memset(buff, 0, 200);
    if ((otpr_file = fopen("D:\\Projects\\server_client\\Debug\\rufus.exe", "rb")) == NULL)
    {
        printf("Ошибка открытия файла.\n");
        return -4;
    }
    else
    {
        for (;;)
        {
            fread(buff, 5, 200, otpr_file);
            int send_chars = send(sock, buff, 200, 0);
            if (send_chars > 0)
            {
                printf("Получено байт: %d\n", send_chars);
            }
            else if (send_chars == 0)
            {
                printf("Соединение закрыто\n");
                break;
            }
            else if (send_chars == SOCKET_ERROR)
            {
                DWORD error = WSAGetLastError();
                getError(error);
                return -5;
                break;
            }
        }
        fclose(otpr_file);
        closesocket(sock);
        WSACleanup();
        return 0;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2016, 04:47
Ответы с готовыми решениями:

Решение ошибки: Сделана попытка выполнить операцию на объекте, не являющемся сокетом
при запуске программы на другом компе при попытке подключения через WinSock выдаётся ошибка WSAENOTSOCK (Сделана попытка выполнить операцию...

OSError: [WinError 10038] Сделана попытка выполнить операцию на объекте, не являющемся сокетом
Добрый вечер форумчане. Возникла проблема при старте клиенской части (Пишу чат на сокетах) Сервер стартует. На клиенте выдает ошибку -...

Ошибка: Попытка выполнить недопустимую операцию с плавающей запятой
Добрый день! Скрипт падает во следующей ошибкой Сообщение 3623, уровень 16, состояние 1, процедура _WAR_Coordinate_Determine, строка...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2016, 04:47
Помогаю со студенческими работами здесь

При установке MS SQL попытка выполнить несанкционированную операцию
Windows Server 2012 Microsoft SQL Server 2008 Exception type: Microsoft.SqlServer.Configuration.Sco.ScoException Message: ...

Ошибка System.BadImageFormatException: "Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение и
Приветствую всех, нуждаюсь в помощи. Пытаюсь сделать голосовое управление ПК используя библиотеку Vosk. Как таковой документации по этому...

Реализовать операцию поиска узла с заданным значением в дереве, не являющемся деревом поиска
На основе процедуры обхода дерева снизу вверх реализовать операцию поиска узла с заданным значением в дереве, не являющемся деревом поиска....

Была сделана попытка загрузить программу, имеющую неверный формат
Скачал lib sfml ,сделал как всё надо ,закинул зависимости и дт. Но вылезает это исключение System.BadImageFormatException:...

Была сделана попытка загрузить программу, имеющую неверный формат
Совсем уж отчаявшись получить внятный ответ по поводу перевода я решил просто запихнуть эту стремную неработающую на шарпе, но работающую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru