Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3213 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Transfert d'informations ip to ip , c chaud ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Transfert d'informations ip to ip , c chaud ?

n°402620
piloud
Posté le 21-05-2003 à 13:25:15  profilanswer
 

Bon je m'explique ...  
J'aimerais bien faire  une conec ip - > ip entre un logiciel delphi  
 
imaginons  
 
toto a le prog et se met en mode receive , tata peut alors envoyer un fichier ou du texte ( pour chat par ex ) a toto en entrant son ip ?  
 
c dur a faire ?  
vous avez de tutos sous la mains ?  
 
Merci d'avance !


Message édité par piloud le 21-05-2003 à 20:20:44
mood
Publicité
Posté le 21-05-2003 à 13:25:15  profilanswer
 

n°402626
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-05-2003 à 13:27:28  profilanswer
 

Soit tu le fais à la main avec TClientSocket/TServerSocket ou les composants TCP de Indy, ou alors pour le transfert de fichiers tu utilises par ex les composants FTP de Indy


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°402696
piloud
Posté le 21-05-2003 à 14:07:42  profilanswer
 

:(  delphi me dit que dans ma verison , ya pas d'aide pour les Tserversocket et TclientSocket :(  
 
et je crois qui va me falloir un tuto :)
 
 
transfert de fichier impossible via TclientSocket/TserverSocket ?
 
Sachant que le but n'est pas de faire un transfert de fichier avec une interface graphique a la smartftp et etc...
mais c juste le programme qui se charge de faire choisir le fichier a uploader .... et le serveur doit le placer dans le directory de son choix ....  
 
Puis c koi exactement le socket ?  
et puis moi pour linstant .. ( euh jai jamais utiliser ca encore lol )  
j'arrive pas plus loin que ca ....  
 

Code :
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. Serveur.Port:=5555;
  4. Serveur.Active:=true;
  5. Serveur.
  6. end;
  7. procedure TForm1.Button2Click(Sender: TObject);
  8. begin
  9. Client.Port:=5555;
  10. Client.Active:=true;
  11. end;


 
Comment specifié lip dans la partie client , et fait en sorte dans la partie serveur .. quil se mette sur l'ip internet et sur l'ip local  
 
 
puis comment envoyer un message recuparable par une variable de type string coté serveur
 
 voila c tout  :lol:  
merci d'avance  
 

n°402743
piloud
Posté le 21-05-2003 à 14:28:36  profilanswer
 

pour texte , jai trouve : http://delphipage.free.fr/sockets.html
 
pour les files ca a lar plus cho : )  
help !  
sil le faut ou je peux trouver les indy et commentl es utiliser ?

n°402748
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-05-2003 à 14:30:32  profilanswer
 

indy c'est inclus depuis delphi 6, mais peut-être pas dans les versions "personal"  
http://www.nevrona.com/Indy/
 
pour le ftp, je vois pas ce que le graphique vient faire dans l'histoire, ftp c'est juste un protocole pour le transfert de fichiers


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°402752
piloud
Posté le 21-05-2003 à 14:35:28  profilanswer
 

bha au debut je pensais que le compo indy cetait un genre de client ftp graphique c pour ca ...  
mais bon c pas grave :)

n°403172
piloud
Posté le 21-05-2003 à 16:36:05  profilanswer
 

dans le site du que jai trouve , il ne parle pas de propriete .active  Or elle est initialisee par defaut a false , normal ?  

n°403190
piloud
Posté le 21-05-2003 à 16:41:59  profilanswer
 

Oh ******  ....  
Le serveur ne peut pas envoyer de texte au client via /Tsocketserver/Tsocketclient ???
 

n°403254
piloud
Posté le 21-05-2003 à 17:12:21  profilanswer
 

up pourla derniere question

n°403302
piloud
Posté le 21-05-2003 à 17:43:52  profilanswer
 

c bon jai trouve

mood
Publicité
Posté le 21-05-2003 à 17:43:52  profilanswer
 

n°403454
piloud
Posté le 21-05-2003 à 20:14:25  profilanswer
 

quand jenvoi un message text via les socket , j'ai cette erreur :  
 
erreur socket windows : une requete d'envoi ou de reception de donnees n'a pas ete autorizee car le socket n'est pas connecte(lors de l'envoi sur un socket datagramme en utilisant un apel sendto) aucune adresse na ete fournie !  
 
alors voila .. j'ai ce message d'erreur que quand c le serveur qui envoi le message  
 
quand c le client qui envoit ca passe ...  
mais quand c le serveur qui envoit , ca ne passe pas et j'ai ce bug ...  
 
exemple d'envoi du serveur :  
ServerSocket1.Socket.SendText(pseudo.Text+envoi_message.Text);
exemple d'envoi du client :  
ClientSocket1.Socket.SendText('<'+pseudo.Text+'> '+envoi_message.Text);
 
 
ptet qu'oon peu pas utiliser socket.sendtext du server vers le client mais bon pourkoi  le server il a la fonction send text alors ?  
et pourkoi le client il aurait la fonction receivetext, ca tient pas debout DONC  
HEEEELLLPPP !          
 
ps : Vous etes content ?:)jai delete l'autre topic ! un peu d'aide maintenant please :)


Message édité par piloud le 21-05-2003 à 20:16:14
n°403465
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-05-2003 à 20:23:14  profilanswer
 

bon j'ai sorti le topic de la corbeille et y ai mis l'autre, vu que tu t'étais trompé :D
 
Pour ton problème d'envoi, c'est quand le serveur doit envoyer au client ?
Il me semble qu'il faut savoir quelle connexion utiliser (vu que le serveur peut être connecté à plusieurs clients), il doit y avoir un truc qui te permet d'avoir la liste des connexions ouvertes (un tableau de sockets, le_socket_serveur.Socket.Connections[...] ou un truc du genre...
Je sais plus de tête comment ça marche, mais il doit bien y avoir des tutoriels sur le net


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°403503
piloud
Posté le 21-05-2003 à 21:27:23  profilanswer
 

:lol: je savias pas qu'on pouvait faire ca ... :)
 
oui c quand le serveur doit envoyer au client(s) ...
ton hypothese est tres probable vu que je ne defini aucun clients a qui envoyer ... Je v me renseinger  
 
l'ideal ca serai qu'il envoi a tous ! :)  
 
merci !
 
 

n°403514
mrbebert
Posté le 21-05-2003 à 21:34:25  profilanswer
 

piloud a écrit :

pour texte , jai trouve : http://delphipage.free.fr/sockets.html
 
pour les files ca a lar plus cho : )  
help !  
sil le faut ou je peux trouver les indy et commentl es utiliser ?  

Tu envoies une suite d'octets, c'est tout.
C'est à toi de faire en sorte que chaque appli sache à quoi correspondent les données qui circulent [:proy]  
Un protocole en quelque sorte :)


Message édité par mrbebert le 21-05-2003 à 21:34:43
n°404955
piloud
Posté le 22-05-2003 à 18:54:32  profilanswer
 

antp a écrit :

bon j'ai sorti le topic de la corbeille et y ai mis l'autre, vu que tu t'étais trompé :D
 
Pour ton problème d'envoi, c'est quand le serveur doit envoyer au client ?
Il me semble qu'il faut savoir quelle connexion utiliser (vu que le serveur peut être connecté à plusieurs clients), il doit y avoir un truc qui te permet d'avoir la liste des connexions ouvertes (un tableau de sockets, le_socket_serveur.Socket.Connections[...] ou un truc du genre...
Je sais plus de tête comment ça marche, mais il doit bien y avoir des tutoriels sur le net


 
 
J'ai trouve , je post pour si jamais j'oublier et pour te rafraichir la memoire antp :)  
 
For I:=0 To ServerSocket1.Socket.ActiveConnections -1
Do ServerSocket1.Socket.Connections[I].SendText(a);
 
vala .. je v essayer de commprendre le send file maintenant :)  

n°406798
piloud
Posté le 24-05-2003 à 13:42:41  profilanswer
 

Bon pour le send fichier jai ca comme erreur au moment de l'envoi :  
 
 
E/S 998 : L'accès à cet emplacement de la mémoire n'est pas valide.
 
l'erreur se produit sur le client ... et non pas sur le serv  
le serveur etant celui qui envoi le fichier
 
 
ca pas tres explicite pour moi ... donc help :) !


Message édité par piloud le 24-05-2003 à 13:43:46
n°406803
piloud
Posté le 24-05-2003 à 13:57:43  profilanswer
 

ca se passe quand au moment du
 
 
p:=socket.ReceiveBuf(tab,socket.ReceiveLength);
blockwrite(freception,tab,p);  --> a ce moment la jai lexeption e/s998
 
 
tab etant mon buffer

n°406920
piloud
Posté le 24-05-2003 à 21:20:34  profilanswer
 

:bounce:  :bounce: help

n°406923
mrbebert
Posté le 24-05-2003 à 21:27:23  profilanswer
 

Certainement un problème de taille de buffer. Soit l'un des buffers n'est pas assez grand, soit tu essaies de traiter plus d'informations qu'il n'y en a réellement [:proy]

n°407046
piloud
Posté le 25-05-2003 à 13:59:25  profilanswer
 

j arrive pas .... voici ma lecture .... + envoi
 
 
blockread(fenvoi,tab,sizeof(tab),r);
 ServerSocket1.Socket.Connections[0].SendBuf(tab,r);
 i:=i+r;
 log.Lines.Add('Upload ..' + inttostr(i) +' bytes');
 if i>=Taillefenvoi then
  begin
  closefile(fenvoi);
  ServerSocket1.Socket.Connections[0].SendText('!?!CFINI!?!');
  TimerServeur.Enabled:=false;
  end;
 
et ma reception + ecriture
 
 
begin
 //reception fichier
  p:=socket.ReceiveBuf(tab,socket.ReceiveLength);
  blockwrite(freception,tab,p,w);
  if a = '!?!CFINI!?!' then
   begin
   closefile(freception);
   ITSFICHIER:=false;
   end;
  exit;
 end;
 
help !
 

n°407166
piloud
Posté le 25-05-2003 à 18:12:41  profilanswer
 

mrBebert a écrit :

Certainement un problème de taille de buffer. Soit l'un des buffers n'est pas assez grand, soit tu essaies de traiter plus d'informations qu'il n'y en a réellement [:proy]  


 
 
oui mais enfin bon , c pas moi qui specifie la taille des buffers ou si ? :)  
 
dans l'aide delphi jai trouve ca :  

Citation :


Si AmtTransferred est omis, une erreur d'E/S se produit si le nombre d'enregistrements écrits n'est pas égal à Count. Si la directive du compilateur $I+ est effective, les erreurs déclenchent une exception EInOutError.


 
mais c un peu du chinois pour moi ....  
so help !  

n°407168
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-05-2003 à 18:14:13  profilanswer
 

Pour les fichiers c'est plus facile d'utiliser les TFileStream que les fichiers comme ceux que tu utilises


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°407247
piloud
Posté le 25-05-2003 à 20:33:16  profilanswer
 

mouah je veux bien  
mais ca oblige a faire une autre conection CLIENT SERV pendant le transfert du fichier non ?  
 
je peux pas utiliser mes socket actuelles ...  
et on je peux trouver ce TfileStream ?  

n°407252
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-05-2003 à 20:36:55  profilanswer
 

:??: je vois pas le rapport, TFileStream c'est pour sauver ton fichier en local, à la place des fonctions Pascal AssignFile/CloseFile et de ce blockwrite que j'avais jamais vu :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°407700
piloud
Posté le 26-05-2003 à 11:34:23  profilanswer
 

ha ok je croyais que cetait un composant delphi moi ... :)
ok je v me renseigner !

n°407791
piloud
Posté le 26-05-2003 à 12:33:40  profilanswer
 

sachant que les fichier sont a transferer sont du type ini  
 
je doit utiliser koi comme readbuffer ? (pour les Tfilestream)
 
LeFichier.ReadBuffer(MaVariableDeTypeString, SizeOf(MaVariableDeTypeString)); ?
 
Lefichier.WriteBuffer(VariableDeTypeString, SizeOf(MaVariableDeTypeString));
 
Je v avoir le meme fichier au debut et a la fin ?  
 
 
Biensur , je pourrai aussi recup .. toutes les valeurs du ini et les envoyer par des socket.sendtext et les reecrir a l'arrivee mais si je pouvait eviter ... moi je voudrai une copie conforme du fichier ..  
 
le mieux ca se serait une copie byte par byte en faite ...  
so HELP :)
 

n°407885
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 13:56:53  profilanswer
 

tu risques de tout bousiller à jouer avec des chaînes comme ça :D
 
SetLength(Chaine, Fichier.Size);
Fichier.Read(@Chaine[1], Fichier.Size);
 
-> le contenu est dans Chaine
 
Et pour écrire:
 
Fichier.Write(@Chaine[1], Fichier.Size);
 
il faut peut-être pas le @ devant, à tester (il le dira à la compilation si ça ne lui plaît pas)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408137
piloud
Posté le 26-05-2003 à 16:32:18  profilanswer
 

antp a écrit :

tu risques de tout bousiller à jouer avec des chaînes comme ça :D
 
SetLength(Chaine, Fichier.Size);
Fichier.Read(@Chaine[1], Fichier.Size);

 
-> le contenu est dans Chaine
 
Et pour écrire:
 
Fichier.Write(@Chaine[1], Fichier.Size);
 
il faut peut-être pas le @ devant, à tester (il le dira à la compilation si ça ne lui plaît pas)


 
tu veux bien me le commenter , histoire que je ne meurt pas idiot ... parceque je pige pas exactement ce que ca fait les @ et le SetLength

n°408146
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 16:36:47  profilanswer
 

SetLength c'est pour réserver une taille de chaine  
Read & ReadBuffer ne savent pas que tu vas écrire vers une variable de type chaîne, donc elles ne vont pas réserver la mémoire avant d'aller écrire dedans (quand tu fais chaine1 := 'truc' delphi réserve de la mémoire pour chaine1 pour pouvoir y placer 'truc', c'est automatique parce que là delphi sait que chaine1 est une chaine).
Le [1] c'est parce que le début de la chaîne est à la position 1 (premier caractère) donc c'est là qu'il faudra commencer à écrire/lire.
Le @ c'est parce que Read & Write s'attendent peut-être à avoir un pointeur (adresse mémoire) plutôt qu'une bête variable. Mais je n'en suis plus sûr. S'il faut pas le @, le compilateur râlera.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408200
piloud
Posté le 26-05-2003 à 16:52:56  profilanswer
 

euh petite question , dans ton exemple ... chaine , elle peut aller jusque quelle taille ?  
ca plante a combien ? :)

n°408204
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 16:55:11  profilanswer
 

255 octets sous Delphi 1
2 Go sous Delphi 2 à 7


Message édité par antp le 26-05-2003 à 16:55:46

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408217
piloud
Posté le 26-05-2003 à 16:59:08  profilanswer
 

lol ca devrait passer ! :)

n°408232
piloud
Posté le 26-05-2003 à 17:07:00  profilanswer
 

pour l'ecriture je doit pas faire le setlength ? ou si ?  
 
sachant qu'il n'aura pas ete fait avant car la lecture se fait sur mon soft serveur et la reception sur mon soft client

n°408241
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 17:10:45  profilanswer
 

t'es un peu vague avec lecture/écriture... tu parle d'écriture dans la chaîne ou dans le fichier ?
 
avant d'écrire vers une chaîne avec un truc qui s'attend à avoir autre chose qu'une chaîne (comme ici la méthode Read du TStringList), tu dois toujours faire un SetLength (sauf si à chaque fois le truc que tu lis à pile la même taille et que tu n'as pas modifié ta chaîne évidemment)


Message édité par antp le 26-05-2003 à 17:11:49

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408283
piloud
Posté le 26-05-2003 à 17:28:34  profilanswer
 

apparament ca compile ok ( en enlevant les @)  mais jai un probleme ...  
 
Tfilestream ne me laisse pas ouvrir un fichier qui n'existe pas ... comment je fait ?

n°408306
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 17:51:12  profilanswer
 

Dans l'aide de TFileStream.Create y a les différents modes d'ouverture :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408350
piloud
Posté le 26-05-2003 à 19:26:26  profilanswer
 

help !  
 
//reception fichier
  freception:=Tfilestream.Create(extractfilepath (application.ExeName)+NomFichierReception,fmCreate or fmShareDenyNone);
   
  socket.ReceiveBuf(ChaineReception,socket.ReceiveLength);
  freception.Write(ChaineReception[1],sizeof(ChaineReception));
   
 
 
 
 
//envoi
 routefichier:=Filename;
     Fenvoi:=Tfilestream.Create(routefichier,fmCreate or fmShareDenyNone);
 
 SetLength(Chaine, Fenvoi.Size);
 Fenvoi.Read(Chaine[1], Fenvoi.Size);
 ServerSocket1.Socket.Connections[0].SendBuf(Chaine,r);
 
la ya double probleme ... premierement , le fichier envoyé est vide :) (au moins il se cré , c'est deja ca )  
 
puis il vide le fichier local ....( celui que j'envoi ...)
 
help antp


Message édité par piloud le 26-05-2003 à 19:37:12
n°408356
piloud
Posté le 26-05-2003 à 19:37:50  profilanswer
 

ou c'est que c faut ?  :(  :(

n°408362
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-05-2003 à 19:47:59  profilanswer
 

heu pour ReceiveBuf & SendBuf tu dois aussi prendre le [1] et redimensionner la chaîne avant d'écrire dedans :o
cf ce que j'ai écrit cet aprem :  

Citation :


avant d'écrire vers une chaîne avec un truc qui s'attend à avoir autre chose qu'une chaîne (comme ici la méthode Read du TStringList), tu dois toujours faire un SetLength


(et ReceiveBug / SendBuf prennent un paramètre non type justement, donc c'est le même cas que pour le Read/Write tu TFileStream)
 
Si le fichier local lu est vidé, c'est que tu l'ouvres en fmOpenWrite au lieu de fmOpenRead, non ?


Message édité par antp le 26-05-2003 à 19:48:38

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°408370
piloud
Posté le 26-05-2003 à 20:05:02  profilanswer
 

je l'ouvre en fmCreate mais d'apres laide , c aussi en mode ecriture :)  
 
ok mci , je v voir ce que je peux faire maintenant !

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Transfert d'informations ip to ip , c chaud ?

 

Sujets relatifs
Pb avec transfert de frichier par formulaireGros problème de transfert de BDD MySQL !
Problème de focus... [Résolu] -- Script à emporter tout chaud...C'est chaud l'utilisation de threads ?
Transfert FTP en ASPTransfert de base 10 en base 16 en C ??
[c++] transfert de fichier via un socketTransfert SGDB - SGDB d'un autre type
[HTML] Site web de transfert ftp[ java ] CHanger à chaud de JTree c possible ???
Plus de sujets relatifs à : Transfert d'informations ip to ip , c chaud ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR