Como Soluciono esto en Delphi 7??

Iniciado por xivan25, 10 Agosto 2013, 01:07 AM

0 Miembros y 1 Visitante están viendo este tema.

xivan25

Hola el caso es que estoy haciendo un programa cliente servidor y cuando envio una orden al Cliente para que realize una accion desde un button,cuando tiro a compilarlo me salta este error:

[Hint] UnitMain.pas(61): Variable 'h' is declared but never used in 'TFormMain.BtnEscucharClick'
[Hint] UnitMain.pas(167): Variable 'Recibido' is declared but never used in 'TFormMain.ServerSocketClientRead'
[Error] UnitMain.pas(206): Undeclared identifier: 'apagate'
[Fatal Error] UnitMain.pas(9): Could not compile used unit 'UnitMain'

xivan25

El Error me salta al poner esta instruccion en el button:
serversocket.Socket.SendText(apagate)

xivan25

corregi el error de escritura de orde,la correcta es esta: serversocket.Socket.SendText('apagate')

Pero ahora me salta este error:
Windows socket error:No se permitio una solicitud para enviar
o recibir datos ya que el socket no esta conectado y no de ha
proporcionado ninguna direccion,al realizar el envio de un socket
de datagramas por medio de una llamada sendto (10057)
on API 'send'

Khronos14

Como no pongas el código, no creo que nadie pueda ayudarte...

xivan25

Aqui esta el codigo:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ScktComp, ComCtrls, Buttons, StdCtrls, ImgList,
  Menus,
  UnitFormControl;

type
  TFormMain = class(TForm)
    ListViewConexiones: TListView;
    StatusBar: TStatusBar;
    ServerSocket: TServerSocket;
    ImageTitulo: TImage;
    BtnEscuchar: TSpeedButton;
    PopupMenuConexiones: TPopupMenu;
    Abrir1: TMenuItem;
    N1: TMenuItem;
    Ping1: TMenuItem;
    Cambiarnombre1: TMenuItem;
    ImageList: TImageList;
    SpeedButton1: TSpeedButton;
    Button1: TButton;
    procedure BtnEscucharClick(Sender: TObject);
    procedure ServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocketClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocketClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ListViewConexionesContextPopup(Sender: TObject;
      MousePos: TPoint; var Handled: Boolean);
    procedure Abrir1Click(Sender: TObject);
    procedure ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Cambiarnombre1Click(Sender: TObject);
    procedure Ping1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure EliminarConexion(Socket: TCustomWinSocket);
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

uses UnitOpciones;

{$R *.dfm}

procedure TFormMain.BtnEscucharClick(Sender: TObject);
var
  h: TBitmap;
begin
  if BtnEscuchar.Caption = 'Escuchar' then
  begin
    try
      ServerSocket.Port := StrToInt(FormOpciones.EditPuerto.Text);
      ServerSocket.Open;
      FormOpciones.EditPuerto.Enabled := False;
      BtnEscuchar.Caption := 'Detener';
      StatusBar.Panels[0].Text := 'Esperando conexiones';
    except
      MessageDlg('El puerto ' + FormOpciones.EditPuerto.Text + ' ya está en uso o hay un firewall bloqueandolo, elija otro', mtWarning, [mbok], 0);
    end;
  end
  else
  begin
    ServerSocket.Close;
    ListViewConexiones.Clear;
    FormOpciones.EditPuerto.Enabled := True;
    BtnEscuchar.Caption := 'Escuchar';
    StatusBar.Panels[0].Text := 'Escucha detenida';
  end;
end;

procedure TFormMain.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  item: TlistItem;
  NuevaVentanaControl: TFormControl;
begin
  item := ListViewConexiones.Items.Add;
  item.Caption := Socket.RemoteAddress;
  item.SubItems.Add(' ');
  item.SubItems.Add(' ');
  item.SubItems.Add(' ');
  item.SubItems.Add(' ');
  item.SubItems.Add(' ');
  NuevaVentanaControl := TFormControl.Create(self, socket);
  //Para identificar esta conexión usaremos el Socket.Handle que lo guardaremos
  //como un objeto SubItems.Objects[0]
  item.SubItems.Objects[0] := TObject(Socket.Handle);
  //Guardamos tmb la ventana para ponder mostrarla
  item.SubItems.Objects[1] := NuevaVentanaControl;
  //Enviando esto recibimos del server la información para mostrar en el ListView IP-Nombre-CPU-SO-VER
  Socket.SendText('MAININFO');
end;

//Buscamos y eliminamos el socket que se ha desconectado en el listview
procedure TFormMain.EliminarConexion(Socket: TCustomWinSocket);
var
  i: integer;
begin
  //Buscamos y eliminamos el item del ListView
  for i := 0 to ListViewConexiones.Items.Count - 1 do
    if Socket.Handle = HWND(ListViewConexiones.Items[i].SubItems.Objects[0]) then
    begin
      //Cerramos la ventana que tenga asignada , si la tiene
      if ListViewConexiones.Items[i].SubItems.Objects[1] <> nil then
        (ListViewConexiones.Items[i].SubItems.Objects[1] as TFormControl).Close;
      ListViewConexiones.Items[i].Delete;
    end;
end;

procedure TFormMain.ServerSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  EliminarConexion(Socket);
end;

procedure TFormMain.ServerSocketClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  EliminarConexion(Socket);
  ErrorCode := 0;
end;

procedure TFormMain.ListViewConexionesContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
  if ListViewConexiones.Selected = nil then //No se ha seleccionado item, deshabilitar menu
  begin
    PopupMenuConexiones.Items[0].Enabled := False;
    PopupMenuConexiones.Items[2].Enabled := False;
    PopupMenuConexiones.Items[3].Enabled := False;
  end
  else
  begin
    PopupMenuConexiones.Items[0].Enabled := True;
    PopupMenuConexiones.Items[2].Enabled := True;
    PopupMenuConexiones.Items[3].Enabled := True;
  end;
end;

//Al dar al boton abrir
procedure TFormMain.Abrir1Click(Sender: TObject);
begin
  if ListViewConexiones.Selected <> nil then
    (ListViewConexiones.Selected.SubItems.Objects[1] as TFormControl).Show;
end;

procedure TFormMain.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i: integer;
  item: TListItem;
  Recibido: String;

begin
  //Buscamos a que item corresponde la conexión
  for i := 0 to ListViewConexiones.Items.Count - 1 do
    if Socket.Handle = HWND(ListViewConexiones.Items[i].SubItems.Objects[0]) then
    begin
      item := ListViewConexiones.Items[i];
      //Enviarle la conexión a la ventana de ese item, si la tiene
      if item.SubItems.Objects[1] <> nil then
        (item.SubItems.Objects[1] as TFormControl).OnRead(Socket);
    end;
end;

procedure TFormMain.SpeedButton1Click(Sender: TObject);
begin
  FormOpciones.ShowModal();
end;

procedure TFormMain.Cambiarnombre1Click(Sender: TObject);
begin
  MessageDlg('Lo siento, esta opción no está implementada', mtInformation, [mbok], 0);
end;

procedure TFormMain.Ping1Click(Sender: TObject);
var
  i: integer;

begin
  for i := 0 to ServerSocket.Socket.ActiveConnections -1 do
    if ServerSocket.Socket.Connections[i].Handle = HWND(ListViewConexiones.Selected.SubItems.Objects[0]) then
    begin
      ServerSocket.Socket.Connections[i].SendText('PING');
      //Como objeto 2 guardamos una captura dle tiempo en milisegundo
      ListViewConexiones.Selected.SubItems.Objects[2] := TObject(GetTickCount());
    end;
end;
//ORDEN QUE ENVIO DESDE EL BUTTON Y ME SALTA EL ERROR ANTERIOR CITADO
procedure TFormMain.Button1Click(Sender: TObject);
begin
serversocket.Socket.SendText('apagate')
end;

end.

xivan25

¿¿Alguien tiene una idea de porque salta ese error??   :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD