Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Utilizzo dei socket [Delphi 7]
Forum - Delphi - Utilizzo dei socket [Delphi 7]

Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 13:51
Domenica, 11/07/2010
Ciao a tutti.
Sto cercando per la prima volta di capire come funzionano i Socket in delphi.
Sto cercando di creare una semplicissima applicazione che mi trasmetta una stringa.
Ho prodotto questo codice che prevede una form con una memo, un bottone che dovrebbe inviare la stringa contenuta nell' Edit1.
Tuttavia non funziona. Anzi la condizione contenuta nel bottone mi restituisce che il client non è connesso...
Potete aiutarmi?
grazie mille

Il codice:
Codice sorgente - presumibilmente Delphi

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Sockets;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Memo1: TMemo;
  12.     Server: TTcpServer;
  13.     Client: TTcpClient;
  14.     Button1: TButton;
  15.     Edit1: TEdit;
  16.     procedure ServerAccept(Sender: TObject; ClientSocket: TCustomIpClient);
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure Button1Click(Sender: TObject);
  19.   private
  20.     { Private declarations }
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. procedure TForm1.ServerAccept(Sender: TObject;
  33.   ClientSocket: TCustomIpClient);
  34. begin
  35. Memo1.Lines.Add(ClientSocket.Receiveln());
  36.  
  37. end;
  38.  
  39.  
  40. procedure TForm1.FormCreate(Sender: TObject);
  41. begin
  42.  With Server Do
  43.   begin
  44.     LocalPort:= '132';
  45.     RemotePort:= '132';
  46.     LocalHost:= '192.168.0.2';
  47.     RemoteHost:= '151.16.23.85';
  48.   end;
  49. With Client Do
  50.   begin
  51.     LocalPort:= '132';
  52.     RemotePort:= '132';
  53.     LocalHost:= '192.168.0.2';
  54.     RemoteHost:= '151.16.23.85';
  55.   end;
  56. Client.Active:= True;
  57. Server.Active:= True;
  58. end;
  59.  
  60. procedure TForm1.Button1Click(Sender: TObject);
  61. begin
  62. if client.Connect then
  63.   Client.Sendln(Edit1.Text)
  64. else
  65.   ShowMessage('Non connesso');
  66. end;
  67.  
  68. end.


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:59
Domenica, 11/07/2010
Prima di scrivere programmi che lavorano in rete, bisognerebbe studiare un po' i rudimenti (protocolli, socket, ...).

A prescindere se il tuo codice è corretto o no, dato che ti vuoi collegare ad un IP pubblico (151....), tra l'altro, su una porta minore di 1024, cosa alquanto sconsigliata, devi sapere se il sistema che "ascolta" (il server) sta dietro un router (cosa molto probabile).

In questo caso, l'IP pubblico/porta devono essere nattati verso l'IP/porta privati del PC, attraverso apposita configurazione del router.

Tutto questo esula dal programma o dal codice usato ed è per questo che bisogna avere chiara la teoria, prima di scrivere del codice.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 14:08
Domenica, 11/07/2010
Testo quotato

Postato originariamente da nessuno:

Prima di scrivere programmi che lavorano in rete, bisognerebbe studiare un po' i rudimenti (protocolli, socket, ...).

A prescindere se il tuo codice è corretto o no, dato che ti vuoi collegare ad un IP pubblico (151....), tra l'altro, su una porta minore di 1024, cosa alquanto sconsigliata, devi sapere se il sistema che "ascolta" (il server) sta dietro un router (cosa molto probabile).

In questo caso, l'IP pubblico/porta devono essere nattati verso l'IP/porta privati del PC, attraverso apposita configurazione del router.

Tutto questo esula dal programma o dal codice usato ed è per questo che bisogna avere chiara la teoria, prima di scrivere del codice.



Ok hai ragione, serve la teoria. Tuttavia in questo caso vorrei partire dalla pratica (e non solo in questo caso, ma tante altre volte sono partito dalla pratica per arrivare alla teoria).
Comunque sia si, utilizzo un router.
cosa vuol dire nattati?
Io non ho capito come far connettere il socket: l'ip che gli devo passare è quello locale (quindi il 192.168....) oppure quello "pubblico"?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:26
Domenica, 11/07/2010
Testo quotato

Postato originariamente da a_butta:

Tuttavia in questo caso vorrei partire dalla pratica



Non capisco .... quindi non potrò rispondere a nessuna tua domanda, dato che è tutta teoria ... no?

Testo quotato

cosa vuol dire nattati?



http://it.wikipedia.org/wiki/Network_address_translation

Testo quotato

Io non ho capito come far connettere il socket: l'ip che gli devo passare è quello locale (quindi il 192.168....) oppure quello "pubblico"?



Passare a chi?

1) il server deve ascoltare sull'IP locale
2) l'IP pubblico deve essere nattato sull'IP locale
3) il client si deve collegare all'IP pubblico del server


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
faracchioclaudio (Normal User)
Newbie


Messaggi: 1
Iscritto: 17/08/2010

Segnala al moderatore
Postato alle 9:23
Martedì, 17/08/2010
Io ho lo stesso problema e il pc e' collegato a internet direttamente utilizzando una chiavetta vodafone. Comunque il programma client non comunica con il server.  

PM Quote