Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 06-05-2006
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 21
fer21unmsm Va por buen camino
Cita:
Empezado por seoane
Un mundo apasionante el de los sockets. Desgraciadamente casi toda la documentacion que hay sobre ellos esta pensada para C y no para delphi, pero poniendo un poco de voluntad traducir el codigo de C a delphi no es muy complicado. Busca ejemplos en C (hay un monton) e intenta entenderlos, y si no encuentras la forma de hacer algo en concreto siempre puedes echarle un vistazo al codigo fuente de los componentes Indy por ejemplo.

Para empezar te voy a dejar un ejemplo MUY sencillo, es una aplicacion de consola que espera por una conexion por el puerto 2000. Una vez conectado mostrara por pantalla todo lo que recibe y cuando cerremos la conexion la aplicacion tambien se cerrara. Para probarlo ejecuta el programa y en una consola teclea "telnet 127.0.0.1 2000" y teclea cualquier cosa.

Bueno aqui te lo dejo, si no entiendes algo me lo dices:
Código Delphi [-]program Ejemplo18; {$APPTYPE CONSOLE} uses Windows, Winsock, SysUtils; procedure Conexion(Socket: TSocket); var FDSet: TFDSet; TimeVal: TTimeVal; buf: array[0..1024] of byte; Salir: Boolean; begin Salir:= FALSE; while not Salir do begin TimeVal.tv_sec := 0; TimeVal.tv_usec := 500; FD_ZERO(FDSet); FD_SET(Socket, FDSet); if select(0, @FDSet, nil, nil, @TimeVal) > 0 then begin fillchar(buf, sizeof(buf), 0); if recv(Socket, buf, sizeof(buf) - 1, 0) > 0 then Write(String(PChar(@buf))) else Salir:= TRUE; end; end; end; var WSADATA: TWSADATA; ServerSocket: TSocket; LocalAddr: TSockaddr; ClientSocket: TSocket; RemoteAddr: TSockaddr; AddrSize: Integer; FDSet: TFDSet; TimeVal: TTimeVal; Terminar: Boolean; buf: array[0..1024] of byte; begin if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then try ServerSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if ServerSocket <> INVALID_SOCKET then begin with LocalAddr do begin sin_family := AF_INET; sin_port := htons(2000); sin_addr.s_addr := htonl(INADDR_ANY); // sin_addr.s_addr:= Inet_Addr('127.0.0.1'); end; if bind(ServerSocket, LocalAddr, sizeof(LocalAddr)) <> SOCKET_ERROR then if listen(ServerSocket, SOMAXCONN) <> SOCKET_ERROR then begin Terminar:= FALSE; repeat TimeVal.tv_sec := 0; TimeVal.tv_usec := 500; FD_ZERO(FDSet); FD_SET(ServerSocket, FDSet); if select(0, @FDSet, nil, nil, @TimeVal) > 0 then begin // Para este ejemplo solo vamos a aceptar una conexion. Terminar:= TRUE; AddrSize := sizeof(RemoteAddr); ClientSocket := accept(ServerSocket, @RemoteAddr, @AddrSize); if ClientSocket <> INVALID_SOCKET then Conexion(ClientSocket); if Shutdown(ClientSocket, SD_SEND) <> SOCKET_ERROR then repeat until recv(ClientSocket, buf, sizeof(buf) - 1, 0) <= 0; CloseSocket(ClientSocket); end; until Terminar; end; end; finally WSACleanup(); end; end.


Te paso el mismo codigo en un zip listo para usar
Gracias man, justo necesitaba un codigo así para entender mejor. Bueno para mi suerte tambien conozco algo de c++ voy a buscar sockets por allí tambien, gracias nuevamente
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
referencia circular melon OOP 1 16-04-2006 02:13:00
Algun manual sobre sockets en deplhi 6.0 Gorst6 Internet 1 04-12-2005 10:30:50
pregunta basica sobre sockets Jan_polero Internet 2 23-02-2005 15:51:49
Sobre Sockets Rabata Varios 3 06-11-2003 18:31:55
ejemplo sobre sockets taurux Varios 0 18-06-2003 18:14:52


La franja horaria es GMT +2. Ahora son las 06:25:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi