Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/37: Рейтинг темы: голосов - 37, средняя оценка - 4.97
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
1

Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR

06.07.2019, 13:35. Показов 6860. Ответов 80
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблемные вопросы отражены на скрине

Программа написана к заданию:
1. Разработать прикладной протокол для передачи файлов с помощью транспортного протокола TCP.
1.1. Разработать в Visual C++ приложение Windows для копирования файлов по протоколу, разработанному в п.1:
серверное приложение, которое принимает файлы от клиентских приложений и сохраняет их на диске.

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include <winsock2.h>
#include <Windows.h>
#include <WindowsX.h>
#include <tchar.h>
#include <locale.h>
#include <CommCtrl.h>
#include <Strsafe.h>
#include <string.h>
#include <process.h>
#include <iostream>
#pragma comment ( lib, "ws2_32.lib" )
using namespace std;
#define SHUTDOWN(sock) if(sock != NULL) {shutdown(sock, SD_BOTH); closesocket(sock); sock = NULL;}
struct hostent* hst;
SRWLOCK SrwLock;
WSADATA wsaData;
SOCKET  s;
HANDLE hThread;
HWND hWnd;
HANDLE handleOfClients[20];
sockaddr_in SIN = { 0 };
#pragma pack(push,1)
struct Package
{
    const char recipients[4096];
    const char message[1024];
};
#pragma pack(pop)
TCHAR* host;
int nclients = 0;
Package msg;
SOCKET SocketClients[1024];
char* BaseNameClients[1024];
void GetClientNames(char string[]);
int WritePerSymbol(SOCKET s, char* buf, size_t length);
int ReadPerSymbol(SOCKET s, char* buf, size_t length);
 
unsigned int WINAPI ClientTread(LPVOID client_socket)
{
    SOCKET my_sock;
    my_sock = ((SOCKET*)client_socket)[0];
    const char* NameClients;
    for (;;)
    {
        int n = ReadPerSymbol(my_sock, (char*)& msg, sizeof(msg));
        if (n != SOCKET_ERROR)
        {
            if (strcmp(msg.recipients, "1") == 0)
            {
                int size = 0;
                for (int i = 0; i < nclients; ++i)
                {
                    size = size + strlen(BaseNameClients[i]) + 1;
                }
                NameClients = new char[size + 1];
                strcpy(NameClients, "");
                for (int i = 0; i < nclients; ++i)
                {
                    const char c = strlen(BaseNameClients[i]);
                    StringCchPrintf(NameClients, size + 1, "%s%c%s", NameClients, c, BaseNameClients[i]);
                }
                StringCchCopy(msg.message, 2, "");
                StringCchCopy(msg.recipients, const char(NameClients) + 1, NameClients);
                StringCchCat(msg.recipients, 1, '\0');
                WritePerSymbol(my_sock, (char*)& msg, sizeof(msg));
                delete[] NameClients;
            }
            else
            {
                GetClientNames(msg.recipients);
            }
            if (strcmp(msg.recipients, "0") == 0)
            {
                break;
            }
        }
        else break;
    }
    int currentNameLen = 0;
    getsockname(my_sock, NULL, &currentNameLen);
    char* CurrentName = new char[currentNameLen + 1];
    int err = getsockname(my_sock, (sockaddr*)CurrentName, &currentNameLen);
    if (err != SOCKET_ERROR)
    {
        AcquireSRWLockExclusive(&SrwLock);
        for (int i = 0; i < nclients; ++i)
        {
            if (strcpy(CurrentName, BaseNameClients[i]) == 0)
            {
                CloseHandle(handleOfClients[i]);
                for (int j = i; j < nclients; ++j)
                {
                    BaseNameClients[j] = BaseNameClients[j + 1];
                    SocketClients[j] = SocketClients[j + 1];
                    handleOfClients[j] = handleOfClients[j + 1];
                }
            }
        }
        ReleaseSRWLockShared(&SrwLock);
    }
    delete[]BaseNameClients[nclients];
    nclients--;
    printf("-отключен\n");
    SHUTDOWN(my_sock);
    return 0;
}
 
int _tmain()
{
    setlocale(LC_ALL, "Russian");
    int err = WSAStartup(MAKEWORD(2, 2), &wsaData);
    s = socket(AF_INET, SOCK_STREAM, 0);
    if (s == INVALID_SOCKET)
    {
        printf("Socket error: %d\n", WSAGetLastError());
        WSACleanup();
    }
    SIN.sin_family = AF_INET;
    SIN.sin_port = htons(5150);
    SIN.sin_addr.s_addr = INADDR_ANY;
 
    err = bind(s, (sockaddr*)& SIN, sizeof(SIN));
 
    if (SOCKET_ERROR != err)
    {
        err = listen(s, 5);
    }
 
    if (SOCKET_ERROR != err)
    {
        for (;;)
        {
            sockaddr_in client_addr;
            int client_addr_size = sizeof(client_addr);
            SOCKET client_socket = accept(s, (sockaddr*)& client_addr, &client_addr_size);
            if (INVALID_SOCKET == client_socket)
            {
                nclients++;
                if (WSAEINTR == WSAGetLastError()) break;
            }
            else
            {
                SocketClients[nclients] = client_socket;
                hst = gethostbyaddr((char*)& client_addr.sin_addr.s_addr, 4, AF_INET);
                printf("+%s [%s] был подключен\n",
                    (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr));
                BaseNameClients[nclients] = new char[strlen(hst->h_name)];
                strcpy(BaseNameClients[nclients], hst->h_name);
                //strcat(BaseNameClients[nclients], "%");
                nclients++;
                InitializeSRWLock(&SrwLock);
                handleOfClients[nclients] = (HANDLE)_beginthreadex(NULL, NULL, ClientTread, &client_socket, NULL, NULL);
            }
        }
        WaitForMultipleObjects(nclients, handleOfClients, TRUE, INFINITE);
        SHUTDOWN(s);
    }
}
 
int ReadPerSymbol(SOCKET s, char* buf, size_t length)
{
    int all = length;
    int received = 0;
    while (all > 0)
    {
        received = recv(s, buf, all, 0);
        if (received < 0) return SOCKET_ERROR;
        buf += received;
        all -= received;
    }
    return length;
}
 
int WritePerSymbol(SOCKET s, char* buf, size_t length)
{
    int all = length;
    int sended = 0;
    while (all > 0)
    {
        sended = send(s, buf, all, 0);
        if (sended < 0) return SOCKET_ERROR;
        buf += sended;
        all -= sended;
    }
    return length;
}
 
void GetClientNames(char string[])
{
    unsigned int i = 0;
    unsigned int numOfClients = 0;
    do
    {
        int n = string[i];
        char* clientName = new char[n + 1];
        for (int k = 0; k < n; k++)
        {
            clientName[k] = string[i + 1 + k];
        }
        clientName[n] = '\0';
        cout << clientName << endl;
        strcat(clientName, "%");
        for (int j = 0; j < nclients; ++j)
        {
            if (strcmp(clientName, BaseNameClients[j]) == 0)
            {
                int n = WritePerSymbol(SocketClients[j], (char*)& msg, sizeof(msg));
            }
        }
        numOfClients++;
        delete[]clientName;
        i += n + 1;
    } while (i < 4096 || string[i] != '\0');
    cout << numOfClients << endl;
}
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2019, 13:35
Ответы с готовыми решениями:

CONST_RETURN char *__cdecl strstr (const char *_Str, const char *_SubStr)
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char tracks = { &quot;ya ostavil svoe serdce v harvardskom...

error: no matching function for call to `QObject::connect(QPushButton&, const char[10], QApplication*, const char[8])'
Ошибка понимаю какая, но не понимаю, почему возникла и как исправить!) #include &lt;QtGui&gt; int...

no matching function for call to 'QObject::connect(QCommandLinkButton*, const char*, cNetwork*, const char*)
компилятор ругается ошибка: no matching function for call to...

Чем отличаются объявления const char* и const* char
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель...

80
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 21:37 21
Author24 — интернет-сервис помощи студентам
Запусти из командной строки ping 169.254.69.203
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 21:40  [ТС] 22
oleg-m1973,
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR   Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 21:46 23
Как на клиенте преобразовываешь строку в адрес, InetPtonA?
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 21:50  [ТС] 24
oleg-m1973, Если честно - не знаю ... Я эту лабу делаю по примеру другой лабораторной, я код из другой лабы код брал.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 21:52 25
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, Если честно - не знаю ... Я эту лабу делаю по примеру другой лабораторной, я код из другой лабы код брал.
Найди, где используется SERVER
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 21:53  [ТС] 26
oleg-m1973,
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:04 27
Вроде всё правильно. Надо посмотреть код ошибки, после connect, WSAGetLastError
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:05  [ТС] 28
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Надо посмотреть код ошибки, после connect, WSAGetLastError
а где, или как???
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:12 29
Цитата Сообщение от xamelione25 Посмотреть сообщение
а где, или как???
После if, перед MessageBox сделай
C++
1
2
const auto e = ::WSAGetLastError();
::MessageBox(hwnd, std::to_string(e).c_str(), "ERROR!!!", MK_OK);
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:16  [ТС] 30
oleg-m1973, так?
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:20 31
Примерно. Фигурную скобку { верни на место, сразу после if (....)

Добавлено через 58 секунд
И сделай #include <string>

Добавлено через 1 минуту
И в настройках проекта - С/C++->Language->C++ Language Standard = ..... latest

Добавлено через 29 секунд
MB_OK
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:23  [ТС] 32
oleg-m1973, Сделал, все собралось нормально, перегнал на виртуалку....
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:25 33
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, Сделал, все собралось нормально, перегнал на виртуалку....
Нет, не нормально. Покажи код
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:26  [ТС] 34
oleg-m1973,
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:30 35
У тебя там точно сообщение "Ошибка! Не удалось......" только в этом месте? Не вижу сообщения "ERROR!!!", которое с кодом ошибки. Или ты не скопировал новый exe?
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:35  [ТС] 36
oleg-m1973, Я скопировал..... я щас этот экзешник запустил у себя на главном компе......запустилось и коно с ошибкой вылезло маленькое....а на втором виртуальном клиентском компе не вылазит чето это окно

Добавлено через 29 секунд
oleg-m1973, Может быть какие-то службы там не дают ему вылезти???
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:36 37
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, Может быть какие-то службы там не дают ему вылезти???
Второе же окно вылазит. Они одинаковые.
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 22:38  [ТС] 38
oleg-m1973, Ну у меня на главном оно же вылазит почему-то...
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.07.2019, 22:44 39
Закомментарь второй MessageBox, проверь

Добавлено через 2 минуты
Оно сразу выскакивает после запуска или через ~30сек?

Добавлено через 1 минуту
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, Ну у меня на главном оно же вылазит почему-то...
Что значит "на главном"? Сервер запущен?
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,770
06.07.2019, 23:06  [ТС] 40
oleg-m1973, Огромное спасибо)) Все запустилось без ошибок... оказывается нужно было перезагрузить виртуалки

Но мне непонятен последний нюанс .... У меня по заданию ...я должен с клиентского компа на серверный комп отправлять файлы....но пытаясь добавить файлы у меня ничего не получается.....не врублюсь что не так или с программой или я что-то делаю....
Миниатюры
Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR   Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR  
0
06.07.2019, 23:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2019, 23:06
Помогаю со студенческими работами здесь

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;: невозможно...

Переход с 10 на 17 Студию 2440 =: невозможно преобразовать "const char [2] в char*
Доброго Нового года! Через пару дней сдавать контрольную работу, которую сделал ещё вначале...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void...

Ошибка в коде: несовместимы типы операндов (char и const char)
Текст не содержит знаков препинания и набран одинаковым шрифтом. Составить программу определения...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru