• Miércoles 20 de Noviembre de 2024, 10:35

Autor Tema:  Problema Con Sockets En Delphi  (Leído 3933 veces)

r3z

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problema Con Sockets En Delphi
« en: Lunes 2 de Febrero de 2004, 04:07 »
0
Hola a todos, tengo un problema a ver si alguien me puede ayudar.
El problema es el siguiente: estoy haciendo un web server bajo delphi, algo basico como para probar algunas teorias mias. El server va bien, o sea, se queda escuchando, el problema es cuando se trata de establecer un conexion, hasta el evento OnGetSock va bien, pero en OnAccept salta el siguiente error:

Citar
Project Server.exe raised exception class ESocketError with message: Windows socket error: No se ha permitido una peticion para enviar o recibir datos ya que el socket no está conectado y no se ha proporcionado ninguna direccion, al realizar el envio en un socket de datagramas por medio de una llamada sendto (10057) on API 'getpeername'

como dice el error, en verdad no se establece ninguna direccion, la pregunta es ¿¿porqué?? .. con respecto a lo de la API getpeername, ese problema estuvo siempre, o sea, antes se conectaba bien, pero no se podia saber a que maquina esta conectada (aunque no deberia conectarse siquiera), la instruccion 'Server.Socket.RemoteAddress' daba ese mismo error (creo).

A ver si alguien me puede dar una mano, a lo mejor es un problema del componente, porque ese problema esta solo en ServerSocket, con ClientSocket no tengo ningun problema.
Por las dudas, uso Delphi 6 Personal Edition en un WXP.

De paso aprovecho para sacarte otra pequeña duda: cual era la instruccion para hacer una pausa de x segundos???

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Problema Con Sockets En Delphi
« Respuesta #1 en: Lunes 2 de Febrero de 2004, 19:27 »
0
Es mejor que veas el ejemplo del chat con sockets y ver que paso te falta. Seguramente te falta llamar a un método o asignar una propiedad.

Cuando usas un componente lo mejor es tener un ejemplo de uso ya que muchas veces existen algunos "detalles" que se les olvida mencionar.

Bueno, esto es lo básico: (y por supuesto definir los cuatro OnClient...)

En este esquema el servidor recibe todo centralizado (OnClientRead) y despacha info al cliente donde y cuando le de la gana usando el socket que le da el "SSocketClientConnect".

Código: Text
  1.  
  2.   SSocket:=TServerSocket.create(self);
  3.   with SSocket do
  4.   begin
  5.     Active := False;
  6.     Port:=PUERTO_COMUNICACION;
  7.     ServerType :=stNonBlocking;
  8.     OnClientConnect := SSocketClientConnect;
  9.     OnClientDisconnect := SSocketClientDisconnect;
  10.     OnClientRead := SSocketClientRead;
  11.     OnClientError := SSocketClientError;
  12.   end;
  13.  
  14. .....
  15. SSocket.open;
  16. .
  17. .
  18. .
  19. Con el socket que te da el "SSocketClientConnect" :
  20. (Un array de referencias a objetos "socket" para identificar mejor cada conexión)
  21.  
  22. socketConectado[i]:=Socket;
  23. ..
  24. .
  25. socketConectado[i].sendText(s);
  26. .
  27. .
  28. ........SOLO si esta activo:
  29. SSocket.close;
  30.  
  31.  

BlackTigerX

  • Miembro activo
  • **
  • Mensajes: 92
    • Ver Perfil
Re: Problema Con Sockets En Delphi
« Respuesta #2 en: Jueves 5 de Febrero de 2004, 20:27 »
0
mucho mejor aun, yo recomendaria el uso de los componentes Indy para todo lo que tenga que ver con sockets, de hecho debe haber un ejemplo de un web server en Indy, checate los demos veras...

a tu pregunta
"De paso aprovecho para sacarte otra pequeña duda: cual era la instruccion para hacer una pausa de x segundos??? "

Sleep(1000) //un segundo = 1000 milisegundos
BlackTigerX

r3z

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema Con Sockets En Delphi
« Respuesta #3 en: Lunes 9 de Febrero de 2004, 07:07 »
0
Gracias, no conocia el paquete Indy, muy bueno la verdad