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

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

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

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

Программа написана к заданию:
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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 med univere&quot;, &quot;NewYork New York...

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

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

80
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
01.08.2019, 00:44
Студворк — интернет-сервис помощи студентам
xamelione25, ну так в той теме я писал что надо сделать. Определить макрос _WINSOCK_DEPRECATED_NO_WARNINGS выше всех заголовочных файлов. Точнее, это не самое лучшее решение, но работать должно.
Кликните здесь для просмотра всего текста
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
#define _WINSOCK_DEPRECATED_NO_WARNINGS
 
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
int __cdecl main(void)
{
    WSADATA wsaData;
    SOCKET ListenSocket, ClientSocket;  // впускающий сокет и сокет для клиентов
    sockaddr_in ServerAddr;  // это будет адрес сервера
    int err, maxlen = 512;  // код ошибки и размер буферов
    char* recvbuf = new char[maxlen];  // буфер приема
    char* result_string = new char[maxlen];  // буфер отправки
    // Initialize Winsock
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    // Create a SOCKET for connecting to server
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    // Setup the TCP listening socket
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_addr.s_addr = inet_addr("192.168.0.105");
    ServerAddr.sin_port = htons(12345);
    err = bind(ListenSocket, (sockaddr*)& ServerAddr, sizeof(ServerAddr));
    if (err == SOCKET_ERROR) {
        printf("bind failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
 
    err = listen(ListenSocket, 50);
    if (err == SOCKET_ERROR) {
        printf("listen failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    while (true) {
        // Accept a client socket
        ClientSocket = accept(ListenSocket, NULL, NULL);
        err = recv(ClientSocket, recvbuf, maxlen, 0);
        if (err > 0) {
            recvbuf[err] = 0;
            printf("Received query: %s\n", (char*)recvbuf);
            // вычисляем результат
            int result = 72;
            _snprintf_s(result_string, maxlen, maxlen, "OK %d\n", result);
            // отправляем результат на сервер
            send(ClientSocket, result_string, strlen(result_string), 0);
            printf("Sent answer: %s\n", result_string);
        }
        else if (err == 0)
            printf("Connection closing...\n");
        else {
            printf("recv failed: %d\n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }
 
        // shutdown the connection since we're done
        closesocket(ClientSocket);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2019, 00:44

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

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

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

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

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


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

Или воспользуйтесь поиском по форуму:
81
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru