Holas :).
Tengo un problemita,cuando pongo el socket a la escucha se me tilda la ventana asta q no resiva paquetes :S.Me dan alguna idea de como puedo solucionarlo xD.
Grax ;D.
Pon el código para que podamos ver que haces.
http://foro.elhacker.net/programacion_cc/tutorial_introducion_a_los_sockets_en_ansi_c_by_sagrini_2010-t317054.0.html
http://foro.elhacker.net/programacion_cc/recopilatorio_temas_importantes_de_programacion_cc-t174285.0.html
http://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html
Pon el code, anda...
Kasiko eso a mi me lo dijeron como offtopic y falta leve, a ver si te lo ve algun mod jeje ten cuidado...
Grax,pero el problema no esta en el socket,we si pero es porq hace una especie de loop infinito asta resiva paquetes :S.
pd:es una ventana GUI.
int resivir()
{
WSADATA wsa;
SOCKET sock;
struct sockaddr_in local;
int len=0;
char Buffer[1024];
WSAStartup(MAKEWORD(2,0),&wsa);
sock=socket(AF_INET, SOCK_STREAM, 0);
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons(1616);
if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
{
return -1;
}
if (listen(sock,1)==-1)
{
return -1;
}
len=sizeof(struct sockaddr);
sock=accept(sock,(sockaddr*)&local,&len);//cuando llega aca es donde se tilda :S
while(len!=0)
{
len=recv(sock,Buffer,1023,0);
if (len>0)
{
Buffer[len]=0;
//code...
}
}
}
#include <winsock2.h>
int main ()
{
WSADATA wsa;
SOCKET sock;
struct sockaddr_in local;
int len=0;
char Buffer[1024];
WSAStartup(MAKEWORD(2,0),&wsa);
sock=socket(AF_INET, SOCK_STREAM, 0);
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons(1616);
if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
{
return -1;
}
if (listen(sock,1)==-1)
{
return -1;
}
len=sizeof(struct sockaddr);
sock=accept(sock,(sockaddr*)&local,&len);//cuando llega aca es donde se tilda :S
while(len!=0)
{
len=recv(sock,Buffer,1023,0);
if (len>0)
{
Buffer[len]=0;
//code...
}
}
}
Vale, no entiendo que quieres decir con "se tilda". Se queda en un bucle infinito? Si es eso lo que pasa es que cuando tu cliente se desconecta no manda nada. Yo lo que hago es
if (len>2)
{
Buffer[len]=0;
//code...
}
\r\n == Enter en clientes...
Si te has programado tu el cliente, pon el code tmb. Si no, di cual usas...
Para el NC eso asi va bien... cuando el cliente meta un Enter sales del bucle
Y otra cosa, lo de Buffer [len]=0; no tiene ningún sentido. Para que es? Si es para acabar la cadena se suele poner \0. Pero recuerda lo de \r\n
Si no es, explicanos tu problema...
Grax,pero no es el while,es:
sock=accept(sock,(sockaddr*)&local,&len);
:S,
pd:cuando digo q se tilda es como un bucle infinito,tengo q cerrarlo con el aministrador de tareas :S.
Te has leido lo que te dije? Vamos a ver, en el tuto pongo muy claro que accept deja el programa en pausa hasta que se conecta alguien. Haz un nc -vv localhost 31337 (o tu puerto) y sigues...
No lo avia leido :-[.
mmm,no hay otra forma?,
Si que la hay. Podrias probar a usar telnet o puedes descargar un code del foro.
Si usas Win Vista / 7 tienes que activar el telnet.
http://www.google.es/#sclient=psy&hl=es&q=activar+telnet+en+windows+7&aq=4&aqi=g5&aql=&oq=&pbx=1&fp=ae772f8ffcd452a1
mmm,ahora me pongo a ver eso.Otra cosa que se me courrio es de crear otro proseso.