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

Не работает ping на с++ может кто в курсе чё делать

03.08.2009, 23:41. Показов 2297. Ответов 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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#include <winsock.h>
 
#define HOST_NAME "www.sources.ru" // Любое доменное имя
#define WINSOCK_VERSION 0x0101 // Версия винсока 1.1
#define NO_FLAGS 0 // Флаги не указываем
// В RFC 792 определены значения сообщений ICMP
#define ICMP_ECHO 8 // An ICMP echo message
#define ICMP_ECHOREPLY 0 // An ICMP echo reply message
#define ICMP_HEADERSIZE 8 
 
struct ip // Структура заголовка IP
{
BYTE ip_verlen; // Version and header length
BYTE ip_tos; // Type of service
WORD ip_len; // Total packet length 
UINT ip_id; // Datagram identification 
WORD ip_fragoff; // Fragment offset 
BYTE ip_ttl; // Time to live 
BYTE ip_proto; // Protocol
UINT ip_chksum; // Checksum 
IN_ADDR ip_src_addr; // Source address 
IN_ADDR ip_dst_addr; // Destination address 
BYTE ip_data[1]; // Variable length data area
};
 
struct icmp // Структура заголовка ICMP
{
BYTE icmp_type; // Type of message
BYTE icmp_code; // Type "sub code" (zero for echos)
WORD icmp_cksum; // 1's complement checksum
HINSTANCE icmp_id; // Unique ID (the instance handle)
WORD icmp_seq; // Tracks multiple pings
BYTE icmp_data[1]; // The start of optional data
};
 
char szPingBuffer[100];
 
 
HINSTANCE hInstance;
 
 
WORD InternetChksum(LPWORD lpwIcmpData, WORD wDataLength)
{
long lSum; // Store the summation
WORD wOddByte; // Left over byte from the summation
WORD wAnswer; // The 1's complement checksum
 
lSum = 0L;
 
while (wDataLength > 1)
{
lSum += *lpwIcmpData++;
wDataLength -= 2;
}
 
// Handle the odd byte if necessary and make sure the top half is zero
if (wDataLength == 1)
{
wOddByte = 0;
*((LPBYTE) &wOddByte) = *(LPBYTE)lpwIcmpData; // One byte only
lSum += wOddByte;
}
 
// Add back the carry outs from the 16 bits to the low 16 bits
lSum = (lSum >> 16) + (lSum & 0xffff); // Add high-16 to low-16
lSum += (lSum >> 16); // Add carry
wAnswer = (WORD)~lSum; // 1's complement, then truncate 
// to 16 bits
return(wAnswer);
}
 
 
BOOL DoPingOperation(HANDLE hInstance)
{
// Локальные переменные
int iPacketSize; // размер ICMP-пакета 
int iHostAddrLength; // Длина адреса сетевого компьютера
int iIPHeadLength; // Длина заголовка IP-датаграммы
int iReceivedBytes; // Количество принятых байтов
int iSentBytes; // Количество посланных байтов
int nProtocol; // Номер протокола ICMP
int iSocketError; // Значение кода ошибки
PDWORD pdwTimeStamp; // Счетчик "тиков" при передаче
DWORD dwReturnTime; // Счетчик "тиков" при приеме
DWORD dwRoundTrip; // Счетчик "тиков" среднего времени пробега
// Структуры, описанные в WINSOCK.H
SOCKADDR_IN sockAddrLocal; // Структуры адреса сокета
SOCKADDR_IN sockAddrHost; // 
SOCKET hSocket; // Дескриптор сокета
LPHOSTENT lpHostEntry; // Структура данных с
// информацией о сетевом компьютере
LPPROTOENT lpProtocolEntry; // Структура данных с информацией о протоколе
 
BYTE IcmpSendPacket[1024]; // Буфер для посылаемых данных
BYTE IcmpRecvPacket[4096]; // Буфер для принимаемых данных 
 
struct icmp *pIcmpHeader; // Указатель на структуру ICMP
struct ip *pIpHeader; // Указатель на структуру-заголовок IP
LPSTR lpszHostName; // Указатель на удаленный сервер времени
 
lpszHostName = HOST_NAME;
 
if ((lpHostEntry = gethostbyname(HOST_NAME)) == NULL) {
wsprintf(szPingBuffer, "Could not get %s IP address.", (LPSTR)lpszHostName);
return(FALSE);
}
 
sockAddrLocal.sin_family = AF_INET;
sockAddrLocal.sin_addr = *((LPIN_ADDR) *lpHostEntry->h_addr_list);
 
// В случае простого сокета, мы должны указывать протокол
if ((lpProtocolEntry = getprotobyname("icmp")) == NULL)
nProtocol = IPPROTO_ICMP;
else
nProtocol = lpProtocolEntry->p_proto;
 
// Создаем простой сокет и указываем ICMP в качестве протокола
if ((hSocket = socket(PF_INET, SOCK_RAW, nProtocol)) == INVALID_SOCKET)
{
wsprintf(szPingBuffer, "Could not create a RAW socket.");
return(FALSE);
}
 
pIcmpHeader = (struct icmp *) IcmpSendPacket; // Point at the data area
pIcmpHeader->icmp_type = ICMP_ECHO; // then fill in the data.
pIcmpHeader->icmp_code = 0; // Use the Sockman instance 
pIcmpHeader->icmp_id = hInstance; // handle as a unique ID.
pIcmpHeader->icmp_seq = 0; // It's important to reset
pIcmpHeader->icmp_cksum = 0; // the checksum to zero.
 
//Значение счетчика "тиков" располагается в необязательной области данных
pdwTimeStamp = (PDWORD)&IcmpSendPacket[ICMP_HEADERSIZE];
*pdwTimeStamp = GetTickCount();
iPacketSize = ICMP_HEADERSIZE + sizeof(DWORD);
pIcmpHeader->icmp_cksum = InternetChksum((LPWORD)pIcmpHeader, iPacketSize);
 
if (pIcmpHeader->icmp_cksum !=0 )
{ 
iSentBytes = sendto(hSocket, (LPSTR) IcmpSendPacket, iPacketSize, 
NO_FLAGS, (LPSOCKADDR) &sockAddrLocal, sizeof(sockAddrLocal));
if (iSentBytes == SOCKET_ERROR) {
closesocket(hSocket);
wsprintf(szPingBuffer,
"The sendto() function returned a socket error.");
return(FALSE);
}
 
if (iSentBytes != iPacketSize) {
closesocket(hSocket);
wsprintf(szPingBuffer,
"Wrong number of bytes sent: %d", iSentBytes);
return(FALSE);
}
 
iHostAddrLength = sizeof(sockAddrHost);
 
iReceivedBytes = recvfrom(hSocket, (LPSTR) IcmpRecvPacket, 
sizeof(IcmpRecvPacket), NO_FLAGS, (LPSOCKADDR) &sockAddrHost,
&iHostAddrLength);
}
else {
closesocket(hSocket);
wsprintf(szPingBuffer, "Checksum computation error! Result was zero!");
return(FALSE);
}
 
closesocket(hSocket);
 
if (iReceivedBytes == SOCKET_ERROR) { 
iSocketError = WSAGetLastError();
if (iSocketError == 10004) {
wsprintf(szPingBuffer,
"Ping operation for %s was cancelled.", 
(LPSTR)lpszHostName);
dwRoundTrip = 0;
return(TRUE);
}
else {
wsprintf(szPingBuffer,
"Socket Error from recvfrom(): %d", iSocketError);
return(FALSE);
}
}
 
dwReturnTime = GetTickCount();
dwRoundTrip = dwReturnTime - *pdwTimeStamp;
 
// Указываем на IP-заголовок принятого пакета
pIpHeader = (struct ip *)IcmpRecvPacket;
 
// Извлекаем биты 4-7 и преобразуем количество З2-битных слов в количество байтов
iIPHeadLength = (pIpHeader->ip_verlen >> 4) << 2;
 
// Проверяем длину, чтобы удостовериться, что ICMP-заголовок принят
if (iReceivedBytes < iIPHeadLength + ICMP_HEADERSIZE) {
wsprintf(szPingBuffer, "Received packet was too short.");
return(FALSE);
}
 
// Указываем на ICMP-сообщение, следующее сразу за IP-заголовком
pIcmpHeader = (struct icmp *) (IcmpRecvPacket + iIPHeadLength);
 
// Проверяем, что мы приняли именно "эхо"-ответ
if (pIcmpHeader->icmp_type != ICMP_ECHOREPLY) {
wsprintf(szPingBuffer,
"Received packet was not an echo reply to your ping.");
return(FALSE);
}
 
// Проверяем, принадлежит ли этот пакет нашей программе
if (pIcmpHeader->icmp_id != (HINSTANCE)hInstance) {
wsprintf(szPingBuffer,
"Received packet was not sent by this program.");
return(FALSE);
}
 
// Да, этот пакет был послан нашей программой. Обратите
// внимание на IP-адрес и имя удаленного компьютера,
// пославшего "эхо"-ответ
lstrcpy(lpszHostName, (LPSTR)lpHostEntry->h_name);
wsprintf(szPingBuffer,
"Round-trip travel time to %s [%s] was %d milliseconds.",
(LPSTR)lpszHostName, (LPSTR)inet_ntoa(sockAddrHost.sin_addr), 
dwRoundTrip);
 
return(TRUE); 
}
 
 
void main ()
{
WSADATA wsaData;
 
WSAStartup(WINSOCK_VERSION, &wsaData);
 
DoPingOperation(hInstance);
MessageBox(NULL, szPingBuffer, "www.sources.ru", MB_OK|MB_ICONSTOP);
 
WSACleanup();
}
c:\documents and settings\ff\мои документы\visual studio 2005\projects\з\з\ping.cpp(104) : error C2664: 'wsprintfW' : cannot convert parameter 1 from 'char [100]' to 'LPWSTR'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.08.2009, 23:41
Ответы с готовыми решениями:

Подскажите, кто это? Может кто в курсе? Девка огонь!
Оригинал Вообще распирает интерес, кто же она такая? Может какая-то знаменитость? Вообще кто это? С помощью сайта можно найти...

Может кто в курсе?
Почему в default: printf(&quot;Enter again: &quot;); выводится 2 раза? #include &lt;stdio.h&gt; #define KOEF 1.5 #define RENT1 15 #define RENT2...

Может кто-нибудь в курсе? Название игры
В общем, преподаватель придумал задание: создание игры на Delphi. Принцип в следующем: загружается поле 4x4 или 5x5, в каждой клетке...

1
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
04.08.2009, 00:45
чё делать, чё делать... снимать штаны и бегать, ёпт!
обычная проблема - содрал какой-то криволамерский исходник, не совместимый с поддержкой UNICODE. Отключи его в настройках проекта и будет тебе щастие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.08.2009, 00:45
Помогаю со студенческими работами здесь

Новая мать, китайский б/у камень. Может быть кто в курсе
Всем салют. Месяцем ранее куплена новая мать, приехал заказанный камень. Русская подержка асус не в силах дать ответ. Возможно...

может кто подскажет что делать
Android приложение, в котором нужно построить график. Для этого я получаю с помощью AsyncTask(парсинг XML) значения типа String, но мне их...

Кто может делать игры в делфи?
Нужно сделать игру &quot;Угадай картинку&quot; в делфи. Помогите пожалуйста.

кто может делать блок схему сделайти
program pr3; uses crt; var a: array of integer; i,j,n,p: byte; r: integer; begin clrscr; randomize; write('n: ');

Посоветуйте что делать кто может, я компьютер сломал
Здравствуйте, помогите пожалуйста у меня проблемы... и пошло все после пере-установки системы, и вот когда я пере-установил систему я...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru