Ir para conteúdo
Fórum Script Brasil
  • 0

Receber Dados Ii


Archimeds

Pergunta

A parte em Negrito esta dando problema...gostaria de receber no meu form, mais especificamente no memo1 o texo que essa URL gera...li alguns artigos que dizem pra setar o nome da páginas...não sei que nome seria esse...enfim..tentei um monte de coisa que não deram certo...

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ScktComp, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

Client: TClientSocket;

Memo1: TMemo;

Button2: TButton;

procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);

procedure Button1Click(Sender: TObject);

procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);

var

nome:string;

begin

nome:='/testport.php?port='+edit1.text;

Client.Host:='http://www.utorrent.com';

Client.Socket.SendText('GET ' + nome);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Client.Active:=True;

end;

procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);

begin

Memo1.Lines.Add(Socket.ReceiveText);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Client.Close;

end;

end.

o código do jeito que esta...se executado, e preenchido o valor do edit1...e clicar em verificar, da um erro, assim :: ESocketError whit message:'Can't Change Value while socket is active'.

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

opa

você não pode trocar valores como Host, Porta com o socket ativo!

sendo assim voce não pode definir estes valores em OnConnect, desde

que quando conectado o socket está ativo, ou seja, defina estes

valores antes de ativar o socket...

pegou?

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

opa

você não pode trocar valores como Host, Porta com o socket ativo!

sendo assim voce não pode definir estes valores em OnConnect, desde

que quando conectado o socket está ativo, ou seja, defina estes

valores antes de ativar o socket...

pegou?

abraços

Isso.. foi o que eu tinha dito.

Defina os valores, após isso, em OnConnect faça ele executar o comando...

para depois, você pegar o que lhe interessa.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

esqueci de me logar...

CORRETO zuera...muito bem...o problema é que não consigo fazer ele retornar o que eu quero...o que eu quero está nessa página >> http://www.utorrent.com/testport.php?port=6969 << queria que pelo menos ele retornasse se a porta está aberta ou não.

Uhm...

ele não vai retornar exatamente o que você quer assim do nada. Terás que fazer uma requisição para o servidor e depois filtrar o resultado que quer, em um Memo por exemplo.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Crie um botão, de execução...

um memo

e o ClientSocket (que está na aba INTERNET)

e por exemplo, ponha o código:

Cs => é o ClientSocket

 Cs.Host:='www.utorrent.com';
Cs.Port:=80;
Cs.ClientType:=ctNonBlocking;
Cs.Active:=TRUE;
Ponha o código acima, ao usuário clicar no botão que você criou. No envento OnConnect do Socket, ponha o seguinte comando (essa que é a requisição):
var
pt:string;
begin
pt:='/testport.php?port=6969';
Cs.Socket.SendText('GET ' + pt + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));
o "pt" é a string do site... bem, feito isso, no evento OnRead do Socket, ponha o seguinte código:
Memo.Lines.Add(Socket.ReceiveText);

Pronto. Feito tudo isso, o MEMO irá receber o código fonte...

Até aí ok ?

Link para o comentário
Compartilhar em outros sites

  • 0

cara ...deu certo !!!

se não for muito incomodo...tu poderia me explica o que faz esse comando...porque quero aprender...

Cs.Socket.SendText('GET ' + pt + ' HTTP/1.1' + chr(13)+chr(10) + 'Host: ' + Cs.Host + chr(13)+chr(10) + 'Accept: */*' + chr(13)+chr(10) + 'Connection: Close' + chr(13)+chr(10)+chr(13)+chr(10));

Link para o comentário
Compartilhar em outros sites

  • 0

opa

cs = client socket

SendText = envia texto

o texto que você está enviando é o mesmo que os navegadores (IE, Firefox, etc) fazem para obter informações (GET)...

já para postar informações se usa o POST... as demais informações são cabeçalhos de HTTP como

Accept: */* onde quer dizer que você está aceitando qualquer resultado, ou seja, se voce colocar por exemplo Accept: application/zip quer dizer que você está aceitando apenas conteúdo ZIP... e por ai vai...

lembrando que para mexer nisso você tem que entender de MIME (Multipurpose Internet Mail Extensions)... HTTP/1.1, Host, Connection, são tudo cabeçalhos http...

chr(13)+chr(10) são os caracteres que simulam a quebra de uma linha, você pode usar assim também #13+#10

Se quiser saber tudo sobre HTTP, desde cabeçalhos e demais informações:

http://www.w3.org/Protocols/rfc2616/rfc2616.html

abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...