begin process at 2012 02 10 13:26:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Réseau & Internet

 > 

Client - Server

 > 

TidTCP et synchronisation de threads


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

TidTCP et synchronisation de threads

samedi 26 avril 2008 à 18:18:21 | TidTCP et synchronisation de threads

OcHre

Bonjour,

J'essaye actuellement de coder un serveur Socks 4 avec les composants TidTCPserver et TidClient (Indy 9), et je dois avouer que j'ai pas mal de difficulté pour un projet que je pensais plutot simple au départ. Pour l'instant mon programme fonctionne de cette façon:
 
-Quand un client se connecte au serveur la connexion est stockée dans un tableau de TidPeerthread

-On crée ensuite un thread  qui crée dynamiquement un TidTCPClient, le thread est stocké dans un tableau du type de mon thread

-Quand le serveur socks  reçoit une requête (stockée dans un Tmemorystream)  il envoie sur le serveur cible via le client du thread qu'il a créé

-Quand le client du thread reçoit une réponse (stockée dans un Tmemorystream) du serveur cible il l'envoie au client  via le thread du serveur

Evidemment ca ne marche pas, j'arrive à avoir une page html correctement si celle-ci a un contenu simple mais dés qu'il y a trop d'images ou de liens vers d'autres serveurs il y a énormement de pertes de données (ou de connexions qui ne se font pas), idem apres avoir deux ou trois pages html même simples. Suite à ça je me pose quelques questions:

Est-ce que le problème vient du fait qu'il y a pas mal de threads qui communiquent entre eux?  Et dans ce cas est-que je dois utiliser les sémaphores ou un TThreadList?  Voila comment ca se pass coté serveur:


procedure TForm1.serverExecute(AThread: TIdPeerThread);
var
TailleBuffer:integer;
begin
try
taillebuffer:=athread.Connection.ReadFromStack(false,5000,true);
 if (taillebuffer>0) and (TabClient[athread.connection.tag]<>nil) then
 begin
  athread.connection.Readstream(Tabstream[athread.connection.tag],taillebuffer,false);

  section.Enter;       //<--- section est de type  TCriticalSection
  TabClient[athread.connection.tag].client.writestream(Tabstream[athread.connection.tag]); //<-- TabClient est le tableau  de threads
  section.leave;
  Tabstream[athread.connection.tag].Clear;
  sleep(500);
 end;
except
  section.Leave;
end;
end;

Et coté client:

procedure TClientThread.Execute;
var
taillebuffer:integer;
begin
 repeat
    try
    taillebuffer:=client.ReadFromStack(false,2000,true);
     if (taillebuffer>0) and (Form1.TabConnex[mntag]<>nil) then
     begin
      client.readstream(mnstream,taillebuffer,false);
      section.enter

      Form1.TabConnex[mntag].Connection.Writestream(mnstream);  //<-- Tabconnex est le tableau contenant les threads du serveur
      section.leave
      mnstream.Clear;
      sleep(500);
     end;
    except
     client.DisconnectSocket;
    end;
 until (client.Connected=false);
end;

 J'espère avoir été assez clair, merci.


Rions un peu en attendant la mort.



Cette discussion est classée dans : connection, serveur, client, athread, taillebuffer


Répondre à ce message

Sujets en rapport avec ce message

Connection Clients / Serveur [ par isnotgood ] Bonjour à tous, Nous avons un serveur qui contient un TADOConnection vers une base access. Tous les objets de connexion (TDataSetProvider) sont dans u serveur et client Socket [ par sarlcopib ] salut je suis nassim et je suis un débutant en delphi j'ai apris a faire des connection socket mais le probleme c que la connection <SPAN style="FONT- Les outils de connection Client-Serveur [ par jennybless ] Salut! Ma question paraitra peut être vague. Mais elle est necessaire... J'ai besoinde cette information théorique s'il vous plait.Quelles sont les serveur multiclients [ par mimimou ] J ai l intention d utiliser les composants ICS pour reprogrammer un soft multiclients-serveur de zero car les precedentes versions de mon soft comport La connexion entre Serveur client , ça donne rien [ par jackalunion ] Bonjour J'ai mis en place un serveur qui a pour adresse IP: 127.0.0.0 et le port: 3030. Pour tester la connexion.Le Serveur: Probleme de connection PC distants [ par samigea ] salut tous le monde. j'essaye de programmer depuis longtemps un programme chat toujours ça reuçu en réseau locale mais pour le reseau distant toujour IdTCPClient1 ne ce connect pas au serveur [ par jackalunion ] Bonjour  touts le mondeJ'ai mis en place un serveur avec IDTCPSERVER1 ( avec Delphi 7) avec port:3030 et pour le client c'est pareil port:3030 application de monoposte vers client/serveur [ par saimslim ] bonjour ! je souhaite transformer mon application sous delphi6 de monoposte vers client/serveur. sachant que j'ai utilisé des tables paradox. merci Je veux un moyen de lier le client au serveur? [ par nacerdj ] [img]http://www4.0zz0.com/2010/06/02/08/772034128.jpg[/img] Je veux un moyen de lier le client au serveur, où lorsque vous cliquez sur Envoyer info l'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,356 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales