Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 04-08-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Probando el archivo adjunto de mi último mensaje el ejemplo no parece funcionar bien, al menos aquí en Windows 10. Sin embargo, probando el programa en que estoy usando "Sockets" y que originó este hilo sí que puedo enviar y recibir cadenas de un cliente a un servidor y viceversa. Lo cierto es que ahora mismo on sabría bien qué responderte. Quizá el código de abajo, usado en mi programa, te dé una idea y te sirva de algo:

Código Delphi [-]
unit USocketsCommom;

{
  The code of this unit is mainly based in Socket's
  related code found on Internet and who's author
  is Remy Lebeau, a TeamB team and Delphi developer.
}

interface

uses
  ScktComp;

procedure SendStringToSocket( Socket:
 TCustomWinSocket; Buffer: string );

implementation

uses
  Forms, SysUtils, Classes, WinSock;

procedure SendMemoryStreamToSocket( socket :
 TCustomWinSocket; buffer : TMemoryStream);
var
  dataPtr: PByte;
  numSent: integer;
begin
  buffer.Position := 0;
  dataPtr := PByte( buffer.Memory );
  while buffer.Position < buffer.Size do
  begin
    numSent := socket.SendBuf
    (
      dataPtr^,
      buffer.Size - buffer.Position
    );

    if numSent < 0 then
    begin
      if WSAGetLastError() = WSAEWOULDBLOCK then
      begin
        Sleep( 50 );
        Continue;
      end;
      Exit;
    end;

    if numSent = 0 then
    begin
      Exit; // socket disconnected
    end;

    Inc(dataPtr, numSent);
    buffer.Seek(numSent, soFromCurrent);
    Application.ProcessMessages();
  end;
end;

procedure SendStringToSocket( socket:
 TCustomWinSocket; buffer: string );
var
  ms : TMemoryStream;
begin
  ms := TMemoryStream.Create();
  try
    ms.WriteBuffer( Pointer( buffer )^, Length( buffer ) );
    SendMemoryStreamToSocket( socket, ms );
  finally
    ms.Free();
  end;
end;

end.

Ese es el código que uso en mi programa para enviar cadenas en ambos cliente y servidor. Dicho código parece el resumen de este hilo, en el sentido de que es el que al final estoy usando en mi programa, y, como digo, este funciona como se espera incluso aquí en Windows 10.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
 



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
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Firebir y usar "IF" en la clausula "SELECT" papulo SQL 6 25-07-2006 21:38:04


La franja horaria es GMT +2. Ahora son las 12:10:56.


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