socket
send(sock,reply,length,0);
int WSAGetLastError();
Описание ошибок есть в МСДН.
Основные ошибки:
1. Если сокет типа SOCK_STREAM, тогда он может быть не подключенным.
2. Если подключен, тогда может соединение оборвано слиентом.
3. Может быть у тебя "неправильные" данные для отсылки.
А вообще почитай документацию на HTTP протокол.
если клиент IE, тогда скорей всего он закрыл твоё подключение.
вообще-то есть такая функция
int WSAGetLastError();
Описание ошибок есть в МСДН.
Основные ошибки:
1. Если сокет типа SOCK_STREAM, тогда он может быть не подключенным.
2. Если подключен, тогда может соединение оборвано слиентом.
3. Может быть у тебя "неправильные" данные для отсылки.
А вообще почитай документацию на HTTP протокол.
если клиент IE, тогда скорей всего он закрыл твоё подключение.
Вот кусок кода :
даже самопальный клиент не получает данных из сокета
int main(int argc, char* argv[])
{
SOCKET srv,cln;
WSADATA wsa;
HOSTENT *hst;
char hstname[64],ipname;
sockaddr_in saddr,caddr;
int error,caddr_sz;
socket(AF_INET,SOCK_STREAM,0);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(PORT);
saddr.sin_addr.S_un.S_addr = INADDR_ANY;
bind(srv,(sockaddr*)&saddr,sizeof(saddr));
listen(srv,2);
caddr_sz = sizeof(caddr);
while(cln = accept(...))
DWORD thID;
CreateThread(NULL,NULL,sexToCln,&cln,NULL,&thID);
}
return 0;
}
DWORD WINAPI sexToCln(LPVOID sock){
SOCKET msock;
char *buff,*reply;
int brecv,i,len;
msock=((SOCKET*) sock)[0];
buff= new char(10);
brecv = recv(msock,buff,sizeof(buff),MSG_PEEK);
reply = "HTTP/1.0 200 OK\nContent-Type: text/html\n\n<html><title>hello</title><body><h1>st11-1</h1></body></html>\n\n";
len = strlen(reply);
send(msock,reply,len,0);
closesocket(msock);
return 0;
}
....msock=((SOCKET*) sock)[0];[color=green]//тут ты создаешь указатель на сокет...[/COLOR]
send(msock,reply,len,0);[color=green]// а тут ты пытаешься отослать ответ на неинициализированный сокет, и winsocks не знает куда его слать..[/COLOR]
[COLOR=blue]ты почему не попробовал WSAGetLastError() я же тебе говорил это название, если бы ты посмотрел, то сразу получил бы ошибку, которую смог бы исправить... [/COLOR]
...while(cln = accept(...)) [color=green]//тут ты получаешь инициализированный сокет, который подключен к твоему клинту[/COLOR]
....msock=((SOCKET*) sock)[0];[color=green]//тут ты создаешь указатель на сокет...[/COLOR]
send(msock,reply,len,0);[color=green]// а тут ты пытаешься отослать ответ на неинициализированный сокет, и winsocks не знает куда его слать..[/COLOR]
[COLOR=blue]ты почему не попробовал WSAGetLastError() я же тебе говорил это название, если бы ты посмотрел, то сразу получил бы ошибку, которую смог бы исправить... [/COLOR]
Спасибо за совет, все заработало - результат ошибок - всего лишь лень :(