информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыЗа кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Vykin etu strochku. 21.12.01 13:23  Число просмотров: 1288
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
Ваще лучше юзать не указатель на char а массив, например:
char buf[0x1000];
recv(sock, buf, sizeof(buf), 0);

Работает в 100% случаях!
<programming>
Winsock - The buf parameter is not completely contained in a valid part of the user address space. 15.12.01 23:18  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
получаю данные
int recv( SOCKET s, char FAR *buf, int len, int flags);
но возникает следуйщая ошибка
WSAEFAULT
The buf parameter is not completely contained in a valid part of the user address space.
что это значит???
часть кода
...
char *getbuf=new char[0x1000];
...
case FD_READ:
err=recv(newsock,getbuf,sizeof(getbuf),0);
if(err==SOCKET_ERROR)
{
switch(WSAGetLastError())
{
case WSANOTINITIALISED:
str="1";
break;
case WSAENETDOWN:
str="2";
break;
case WSAEFAULT: // ВОТ ОНА И ВОЗНИКАЕТ
str="3";
break;
...
если не сложно подскажите
Winsock - The buf parameter is not completely contained in a valid part of the user address space. 17.12.01 00:59  
Автор: kabanchik Статус: Незарегистрированный пользователь
Отредактировано 17.12.01 01:00  Количество правок: 1
<"чистая" ссылка>
sledi za "^^^^"

> получаю данные
> int recv( SOCKET s, char FAR *buf, int len, int flags);
> но возникает следуйщая ошибка
> WSAEFAULT
> The buf parameter is not completely contained in a valid
> part of the user address space.
> что это значит???
> часть кода
> ...
> char *getbuf=new char[0x1000];
> ...
> case FD_READ:
> 		       
> err=recv(newsock,getbuf,sizeof(getbuf),0);
                               ^^^^^^^^^^^^^^^^^^^ - tut u tebya vsegda vozvrashaet 4, t.e. sizeof(getbuf) == 4. VSEGDA !!!
poprobuj tak :
> err=recv(newsock, getbuf, 0x1000, 0);


> 			if(err==SOCKET_ERROR)
> 			{
> 				switch(WSAGetLastError())
> 				{
> 				case WSANOTINITIALISED:
> 					str="1";
> 					break;
> 				case WSAENETDOWN:
> 					str="2";
> 					break;
> 				case WSAEFAULT: // ВОТ ОНА
> И ВОЗНИКАЕТ
> 					str="3";
> 					break;
> ...


---
> если не сложно подскажите
к сожалению не помогает :((( 17.12.01 08:45  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
к сожалению не помогает :((( 18.12.01 17:53  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Togda daj infu kakoj socket ty sozdaesh'? bolocking ili non-blocking socket?
potom sledi chtoby tvoj buffer by l valid.
ne mozhet byt' takogo chtoby kod nepravil'no rabotal. ishi bug v tvoem kode.
к сожалению не помогает :((( 18.12.01 19:54  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
вот тут весь мой БРЕД !!!



#include <windows.h>
#include <stdio.h>
#define WM_SELECT WM_USER+1

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

bool ServerSock();

char *str=new char[0x100];
char *sendbuf=new char[0x100];
char *getbuf=new char[0x1000];
char s[0x100];
int len;
int err;

MSG msg;
HWND hWnd;
RECT rect;

SOCKET sock,newsock;
WSADATA ws;
sockaddr_in addr, newaddr;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION ) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW ) ;
wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "name" ;

if(!RegisterClass(&wndclass)) {MessageBox(NULL,"RegisterClass",NULL,NULL); return 0;}

hWnd=CreateWindow("name","Win Socket Async",WS_OVERLAPPEDWINDOW,
10,10,350,250,NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

ServerSock();

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
return 0;

}
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
int size;

switch(msg)
{
case WM_CREATE:
len=err=0;
getbuf=sendbuf="";
str="Server sleep";
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

GetClientRect(hWnd,&rect);
len=0;
while(str[len]!='\0')
len++;
TextOut(hdc,10,10,str,len);
len=0;
while(getbuf[len]!='\0')
len++;
TextOut(hdc,10,30,getbuf,len);

EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
shutdown(sock,1);
closesocket(sock);
WSACleanup();
PostQuitMessage(0);
return 1;
break;
case WM_SELECT:
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
str="CLIENT CONNECT";
InvalidateRect(hWnd,&rect,1);
size =sizeof(newaddr);
newsock=accept(sock,(sockaddr*)&newaddr,&size);
if(newsock==INVALID_SOCKET)
{
str="invalid client socket";
InvalidateRect(hWnd,&rect,1);
shutdown(newsock,1);
closesocket(newsock);
}
break;
case FD_READ:
err=recv(newsock,getbuf,0x100,0);
if(err==SOCKET_ERROR)
{
str="bad recv";
switch(WSAGetLastError())
{
case WSANOTINITIALISED:
str="1";
break;
case WSAENETDOWN:
str="2";
break;
case WSAEFAULT:
str="3";
break;
case WSAENOTCONN:
str="4";
break;
case WSAEINTR:
str="5";
break;
case WSAEINPROGRESS:
str="6";
break;
case WSAENETRESET:
str="7";
break;
case WSAENOTSOCK:
str="8";
break;
case WSAEOPNOTSUPP:
str="9";
break;
case WSAESHUTDOWN:
str="10";
break;
case WSAEWOULDBLOCK:
str="11";
break;
case WSAEMSGSIZE:
str="12";
break;
case WSAEINVAL:
str="13";
break;
case WSAECONNABORTED:
str="14";
break;
case WSAETIMEDOUT:
str="15";
break;
case WSAECONNRESET:
str="16";
break;
}
}
else
{
getbuf[err]='\0';
MessageBox(NULL,getbuf,NULL,NULL);
}
InvalidateRect(hWnd,&rect,1);
break;
case FD_WRITE:
// InvalidateRect(hWnd,&rect,1);
// MessageBox(NULL,getbuf,NULL,NULL);
break;
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
break;
}
return 0;
}
bool ServerSock()
{
if(WSAStartup(0x101,&ws))
{str="WSAStartup Error";InvalidateRect(hWnd,&rect,1);return 0;}

sock=socket(AF_INET,SOCK_STREAM,0);
addr.sin_addr.s_addr=INADDR_ANY;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);

if(bind(sock,(sockaddr*)&addr,sizeof(addr)))
{str="this port is used"; InvalidateRect(hWnd,&rect,1); return 0;}

if(listen(sock,5))
{str="listen Error"; InvalidateRect(hWnd,&rect,1);return 0;}
WSAAsyncSelect(sock,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLOSE);

str="soket init !!!";
InvalidateRect(hWnd,&rect,1);

return 1;

}
к сожалению не помогает :((( 18.12.01 21:29  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>


> вот тут весь мой БРЕД !!!
>
>
>
> #include <windows.h>
> #include <stdio.h>
> #define WM_SELECT WM_USER+1
>
> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
>
> bool ServerSock();
>
> char *str=new char[0x100];
> char *sendbuf=new char[0x100];
> char *getbuf=new char[0x1000];
> char s[0x100];
> int len;
> int err;
>
> MSG msg;
> HWND hWnd;
> RECT rect;
>
> SOCKET sock,newsock;
> WSADATA ws;
> sockaddr_in addr, newaddr;
>
> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE
> hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
> {
>
> WNDCLASS wndclass ;
>
> wndclass.style = CS_HREDRAW|CS_VREDRAW;
>
> wndclass.lpfnWndProc = WndProc;
> wndclass.cbClsExtra = 0;
> wndclass.cbWndExtra = 0;
> wndclass.hInstance = hInstance;
> wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION ) ;
> wndclass.hCursor = LoadCursor (NULL, IDC_ARROW ) ;
> wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
> wndclass.lpszMenuName = NULL ;
> wndclass.lpszClassName = "name" ;
>
> if(!RegisterClass(&wndclass))
> {MessageBox(NULL,"RegisterClass",NULL,NULL); return 0;}
>
> hWnd=CreateWindow("name","Win Socket
> Async",WS_OVERLAPPEDWINDOW,
> 10,10,350,250,NULL,NULL,hInstance,NULL);
>
> ShowWindow(hWnd,nCmdShow);
> UpdateWindow(hWnd);
>
> ServerSock();
>
> while(GetMessage(&msg,NULL,0,0))
> {
> TranslateMessage(&msg);
> DispatchMessage(&msg);
> }
> return msg.wParam;
> return 0;
>
> }
> LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM
> wParam,LPARAM lParam)
> {
> PAINTSTRUCT ps;
> HDC hdc;
> int size;
>
> switch(msg)
> {
> case WM_CREATE:
> len=err=0;
*************Bot ona, cheremuha******************
> getbuf=sendbuf="";
*********************************************************

> str="Server sleep";
> break;
> case WM_PAINT:
> hdc = BeginPaint(hWnd, &ps);
>
> GetClientRect(hWnd,&rect);
> len=0;
> while(str[len]!='\0')
> len++;
> TextOut(hdc,10,10,str,len);
> len=0;
> while(getbuf[len]!='\0')
> len++;
> TextOut(hdc,10,30,getbuf,len);
>
> EndPaint(hWnd, &ps);
> break;
> case WM_DESTROY:
> shutdown(sock,1);
> closesocket(sock);
> WSACleanup();
> PostQuitMessage(0);
> return 1;
> break;
> case WM_SELECT:
> switch(WSAGETSELECTEVENT(lParam))
> {
> case FD_ACCEPT:
> str="CLIENT CONNECT";
> InvalidateRect(hWnd,&rect,1);
> size =sizeof(newaddr);
>
> newsock=accept(sock,(sockaddr*)&newaddr,&size);
> if(newsock==INVALID_SOCKET)
> {
> str="invalid client
> socket";
>
> InvalidateRect(hWnd,&rect,1);
> shutdown(newsock,1);
> closesocket(newsock);
> }
> break;
> case FD_READ:
> err=recv(newsock,getbuf,0x100,0);
> if(err==SOCKET_ERROR)
> {
> str="bad recv";
> switch(WSAGetLastError())
> {
> case WSANOTINITIALISED:
> str="1";
> break;
> case WSAENETDOWN:
> str="2";
> break;
> case WSAEFAULT:
> str="3";
> break;
> case WSAENOTCONN:
> str="4";
> break;
> case WSAEINTR:
> str="5";
> break;
> case WSAEINPROGRESS:
> str="6";
> break;
> case WSAENETRESET:
> str="7";
> break;
> case WSAENOTSOCK:
> str="8";
> break;
> case WSAEOPNOTSUPP:
> str="9";
> break;
> case WSAESHUTDOWN:
> str="10";
> break;
> case WSAEWOULDBLOCK:
> str="11";
> break;
> case WSAEMSGSIZE:
> str="12";
> break;
> case WSAEINVAL:
> str="13";
> break;
> case WSAECONNABORTED:
> str="14";
> break;
> case WSAETIMEDOUT:
> str="15";
> break;
> case WSAECONNRESET:
> str="16";
> break;
> }
> }
> else
> {
> getbuf[err]='\0';
>
> MessageBox(NULL,getbuf,NULL,NULL);
> }
> InvalidateRect(hWnd,&rect,1);
> break;
> case FD_WRITE:
> // InvalidateRect(hWnd,&rect,1);
> // MessageBox(NULL,getbuf,NULL,NULL);
> break;
> }
> break;
> default:
> return
> DefWindowProc(hWnd,msg,wParam,lParam);
> break;
> }
> return 0;
> }
> bool ServerSock()
> {
> if(WSAStartup(0x101,&ws))
> {str="WSAStartup
> Error";InvalidateRect(hWnd,&rect,1);return 0;}
>
> sock=socket(AF_INET,SOCK_STREAM,0);
> addr.sin_addr.s_addr=INADDR_ANY;
> addr.sin_family=AF_INET;
> addr.sin_port=htons(80);
>
> if(bind(sock,(sockaddr*)&addr,sizeof(addr)))
> {str="this port is used";
> InvalidateRect(hWnd,&rect,1); return 0;}
>
> if(listen(sock,5))
> {str="listen Error";
> InvalidateRect(hWnd,&rect,1);return 0;}
>
> WSAAsyncSelect(sock,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLO
> SE);
>
> str="soket init !!!";
> InvalidateRect(hWnd,&rect,1);
>
> return 1;
>
> }
к сожалению не помогает :((( 19.12.01 00:34  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ОГРОМНО СПАСИБО!!!
У меня есть дополнительный вопросик
В чем моя ошибка ??? может это с моей стороны глупо звучит но я даже после того как ты указал мне на нее я не понимаю что тут такого. Конечно чисто интуитивно какие-то мысли по этому поводу у меня летают. но полет их так туманен и далек, что …
Что не верно ( как ошибку можно сформулировать)
char *sendbuf=new char[0x100];
char *getbuf=new char[0x1000];
…..
getbuf=sendbuf="";
…..
recv(newsock,getbuf,0x100,0);
…..
p.s. мне позор !!!!
Vykin etu strochku. 19.12.01 02:50  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Vykin etu strochku. 19.12.01 08:54  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я понял что надо выкинуть
но почему что в ней такого что она глючит всю прогу
меня интерисует почему. я просто не аонимаю что в ней такого
Vykin etu strochku. 21.12.01 13:23  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
Ваще лучше юзать не указатель на char а массив, например:
char buf[0x1000];
recv(sock, buf, sizeof(buf), 0);

Работает в 100% случаях!
Vykin etu strochku. 21.12.01 21:46  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Ваще лучше юзать не указатель на char а массив, например:
> char buf[0x1000];
> recv(sock, buf, sizeof(buf), 0);
>
> Работает в 100% случаях!

I chto ty dlia odnogo bita, 0x1000 bite bydeliat` budesh ? A esli dannyh bolshe chem 0x1000? Umnik e.p.r.s.t.
Vykin etu strochku. 23.12.01 12:54  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
> > Ваще лучше юзать не указатель на char а массив,
> например:
> > char buf[0x1000];
> > recv(sock, buf, sizeof(buf), 0);
> >
> > Работает в 100% случаях!
>
> I chto ty dlia odnogo bita, 0x1000 bite bydeliat` budesh ?
> A esli dannyh bolshe chem 0x1000? Umnik e.p.r.s.t.
ХаХаХа :)))
ну ты ламо!!
не знаешь - не 3.14зди!
Послушай лучше что знающие люди тебе говарят,
Если данные больше 0х1000, то если у тебя recv(socket, buf, sizeof(buf), 0), то придут данные исключительно размером sizeof(buf), остальные данные нужно получать ещо раз вызвав recv(socket, buf, sizeof(buf), 0)
А если данные меньше sizeof(buf), то полезно делать так:
int ret = recv(socket, buf, sizeof(buf), 0)
buf[ret] = 0;
Особенно если данные строковые
Удачи!!

Pampersy smeni, a to voniaet uzhe. 24.12.01 22:21  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Vykin etu strochku. 19.12.01 22:51  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
I voobche posmotri kak ty rabotaesh s "char*" ty ih putaesh veroiatno s CString (ili kakimo libo eche string obj), dlia raboty so stringami cheres char* ispolzui "C" String Manipulation function :
naprimer:
char string[80];
strcpy( string, "blah, blah blah!" );//scopirovali string

//ty zhe delal bot tak:
//string = "blah, blah blah!" ;
//chto ne est` verno, v dannom skuchee compiler zakrichit
//a esli zhe
//char* string = new char[80];
//togda ty perepishesh string pointer allocirovanniy by new operator na
//pointer ukazyvauchii na ->"blah, blah blah!"
Vykin etu strochku. 19.12.01 09:08  
Автор: SEH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> я понял что надо выкинуть
> но почему что в ней такого что она глючит всю прогу
> меня интерисует почему. я просто не аонимаю что в ней
> такого
Во-первых, сначала оба указателя указывали на буфер, теперь они указывают на константную строку ("" - это и есть указатель)
Во-вторых, похоже, что компилятор хранит указанную выше строку в другом сегменте , куда запись запрещена, поэтому и возникает такая ошибка

А вообще раз уж пишешь на C++, то используй нормальный класс для строк, а то char* - это такая гадость.

Все выше сказанное является 'IMHO'. Просьба близко к сердцу не принимать.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach