besoin daide - Delphi/Pascal - Programmation
Marsh Posté le 03-07-2002 à 14:30:17
Euh....
Tu dis ton pb ici et on voit ce qu'on peut faire
Marsh Posté le 03-07-2002 à 16:34:35
enfait je fait transfere des fichiers entre le client et le serveur. tout fonctionne sauf si le fichier est un peu trop gros (>1mo) a ce moment il commence a le charger puis sarrette apres un moment. si je reesaye de le charger il reprend ou il est arriver puis sarette de nouveau. example :
je demande de charger le fichier
0 --> 33% puis sarrette
si je redemande se meme fichier
33 --> 66%
etc...
par contre avec de petit fichier sa marche impec
Marsh Posté le 03-07-2002 à 16:51:09
G eu le même pb
Tu l'envois avec quoi ? (sendstream, sendbuff ?) Et comment ? (assign & co ou TFileStream ?)
Marsh Posté le 06-07-2002 à 15:12:51
bon ben jpense que ca vient du fait que le composant envoie des string au lieu de tstring du coup tout arrive collé. sous delphi6 jarrive pas a trouve le composant pour envoyer du tstring... comment on fait ? apparament c ds delphi5 mais je lai po :-( ptet qd installant une extention...
Marsh Posté le 06-07-2002 à 17:31:17
Utilise sendbuffer
oubli sendtext
le pb C que tu exploses le buffer windows et que tu tests pas si l'envois C bien passé
Marsh Posté le 06-07-2002 à 17:33:27
red faction a écrit a écrit : bon ben jpense que ca vient du fait que le composant envoie des string au lieu de tstring du coup tout arrive collé. sous delphi6 jarrive pas a trouve le composant pour envoyer du tstring... comment on fait ? apparament c ds delphi5 mais je lai po :-( ptet qd installant une extention... |
si tout arrive collé ça a rien à voir
si tu veux envoyer un TStrings faut tout redécoder à l'arriver.
Et c'est pas clair.
Tu envoies comment exactement ?
Si tu fais des Send.. séparés c'est normal que tout soit "collé" : il fait un buffering, c'est WinSock.
Marsh Posté le 06-07-2002 à 17:36:53
Ha et essaie de mettre des titres explicites à tes topics
Marsh Posté le 06-07-2002 à 17:36:56
antp a écrit a écrit : si tout arrive collé ça a rien à voir si tu veux envoyer un TStrings faut tout redécoder à l'arriver. Et c'est pas clair. Tu envoies comment exactement ? Si tu fais des Send.. séparés c'est normal que tout soit "collé" : il fait un buffering, c'est WinSock. |
C pas wraiment WinSock... C le TCP C pas parreil avec l'UDP
On peut le déactiver mais C trés peu recommendé
Marsh Posté le 06-07-2002 à 17:37:26
bhen les sockets Delphi c'est pas une encapsulation de Winsock
Marsh Posté le 06-07-2002 à 17:38:22
antp a écrit a écrit : bhen les sockets Delphi c'est pas une encapsulation de Winsock |
si
mais ça vient du protocole
Marsh Posté le 06-07-2002 à 17:38:30
oui je fait des sendtext separe et il colle tout . le probleme c qua larrivee faut tout separe (en fait jenvoie une liste de fichiers) c pour ca quavec du tstring ce serait ptet plus facile
avec sendbuffer ca changera quoi ?
Marsh Posté le 06-07-2002 à 17:40:50
red faction a écrit a écrit : oui je fait des sendtext separe et il colle tout . le probleme c qua larrivee faut tout separe (en fait jenvoie une liste de fichiers) c pour ca quavec du tstring ce serait ptet plus facile avec sendbuffer ca changera quoi ? |
rien
fo que fasses un protocole de comunication (commandes, etc...)
mais tu veux faire quoi exactement ? juste transfert de fichiers ?
Marsh Posté le 06-07-2002 à 17:43:34
ici exemples de transfert de fichiers et communication rezo
http://users.pandora.be/dirk.claessens2/
Marsh Posté le 06-07-2002 à 17:48:57
[SDF]Poire a écrit a écrit : rien fo que fasses un protocole de comunication (commandes, etc...) mais tu veux faire quoi exactement ? juste transfert de fichiers ? |
oui je fais un transfert de fichier mais avant faut que je transmette la liste et v uque tout les noms de fichiers sont collé avec ma methode apres faut passer son temps a les decoller (vu que les noms de fichiers sont pas de la meme longeur)
Marsh Posté le 06-07-2002 à 17:53:04
red faction a écrit a écrit : oui je fais un transfert de fichier mais avant faut que je transmette la liste et v uque tout les noms de fichiers sont collé avec ma methode apres faut passer son temps a les decoller (vu que les noms de fichiers sont pas de la meme longeur) |
Va voir le lien que G donné
Marsh Posté le 06-07-2002 à 17:54:08
Solution simple:
Tu mets tes noms dans un TStringList, tu envoies le contenu de la propriété Text de la TStringList, de l'autre côté tu mets la chaîne reçue dans la propriété Text d'une TStringList, ça résout ton problème de découpe.
Marsh Posté le 06-07-2002 à 18:08:37
antp a écrit a écrit : Solution simple: Tu mets tes noms dans un TStringList, tu envoies le contenu de la propriété Text de la TStringList, de l'autre côté tu mets la chaîne reçue dans la propriété Text d'une TStringList, ça résout ton problème de découpe. |
hihi en partit
C la solution que j'avais employé à l'époque et telle trouve vite ces limites
Marsh Posté le 07-07-2002 à 14:51:22
ben jai trouve une autre solution(ptet pas super fiable mais bon) :y suffit dattendre un ptit peu entre 2 sendtext (avec un sleep(50) par ex. et la ca arrive morceau par morceau de lautre cote le seul prob c de regle le sleep, si c trop long on risque dattendre pour rien et ds lautre cas ben... ca risque de foire a nouveau. lideal se serait de pouvoir verifier si ca bien ete recu et de faire un sleep en attendant :
du genre
sendtext("......." );
while (not (client.received) do
sleep();
sendtext("......." );
Marsh Posté le 07-07-2002 à 14:57:38
Suffit que l'autre côté dise "bien reçu" après chaque message et c'est bon, non ?
Marsh Posté le 07-07-2002 à 15:03:18
tu vas m'abandonner ce sendtext oui ???
Et va voir le link !!!
Marsh Posté le 07-07-2002 à 15:27:54
Et si tu envoyais un caractère 0 comme pour marquer la fin de tes chaines de caractères. Evidemment, si tu utilisais le C, tu n'aurais pas eu ce problème
Marsh Posté le 07-07-2002 à 15:57:00
Kristoph a écrit a écrit : Et si tu envoyais un caractère 0 comme pour marquer la fin de tes chaines de caractères. Evidemment, si tu utilisais le C, tu n'aurais pas eu ce problème |
nimporte nawak
Sendtext
Marsh Posté le 07-07-2002 à 16:44:10
clair ça a rien à voir
on envoie ça à une fonction de l'API Windows, donc la chaîne est convertie à un moment ou un autre en PChar... soit une chaîne char* finie par un 0
Marsh Posté le 07-07-2002 à 17:10:52
Je crois pas que TCP soit un protocole pour envoyer des chaines de caractères mais des données binaires brutes. Donc ce que vous envoyés c'est des données brutes. CF man socket :
NOM
send, sendto, sendmsg - Envoyer un message sur une socket.
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int send(int s, const void *msg, size_t len, int flags);
ca prend un void * et le paramètre de taille. Donc en C, si tu fais :
Code :
|
Ca envoye le \0 terminal qui permet de connaitre la taille de la chaine sans avoir à faire d'autres manips
Bien sur, si ca vous embete, vous pouvez aussi coller un retour chariot ( \n ) à la fin de votre chaine pour délimiter celles ci
PS: les sockets Windows sont identiques en tout points au sockets UINX sauf qu'il faut initialisé les sockets Windows. Après c'est tout pareil.
Marsh Posté le 07-07-2002 à 17:27:59
Marsh Posté le 07-07-2002 à 17:50:52
Zion a écrit a écrit : http://images-eu.amazon.com/images [...] ZZZZZZ.jpg |
Marsh Posté le 02-07-2002 à 22:28:43
j'ai besoin de qqn qui s'y connait un peu en delhpi sur lutilisation des socket, jai fait une appli et ya qq trucs qui marchent pas. je peut pas poster tout le code ici (un peu trop long) mais si qqn accepte de m'aider je lui envoie en pv
Message édité par red faction le 02-07-2002 à 22:29:22