A SUPPRIMER MERCI

A SUPPRIMER MERCI - C++ - Programmation

Marsh Posté le 03-03-2010 à 18:17:19    

A SUPPRIMER MERCI

Message cité 1 fois
Message édité par Romiinet le 18-10-2014 à 13:28:17

---------------
Achats & Ventes
Reply

Marsh Posté le 03-03-2010 à 18:17:19   

Reply

Marsh Posté le 07-03-2010 à 13:04:56    

Ton programme est pas clair!  
As tu déjà fais un client serveur en mode texte?
 
Regarde bien la doc des thread pour vérifier que tu t'y prends de la bonne façon :
http://msdn.microsoft.com/en-us/library/ts553s52.aspx

Reply

Marsh Posté le 07-03-2010 à 22:24:13    

Romiinet a écrit :


Code :
  1. public ref class Form1 : public System::Windows::Forms::Form
  2.     {
  3.      public:
  4.            Form1(void)
  5.            {
  6.                   InitializeComponent();
  7.                  myThread=gcnew Thread(gcnew ThreadStart(this, &Serveur));
  8.            }
  9. ...




Quand je regarde le code c++ http://msdn.microsoft.com/en-us/li [...] start.aspx
je me dis que ton &Serveur est incorrect et devrait ressembler à peut etre &Form1::Serveur
 
 
Il faudrait que tu mette tout le code pour être sur...
 
 
Pour l'erreur (176)error C2227: la partie gauche de '->Text' doit pointer vers un type class/struct/union/générique , je pense que tu as mal orthographié TB_Port (c'est un widget texte?)

Reply

Marsh Posté le 08-03-2010 à 19:03:03    


Code :
  1. public ref class Form1 : public System::Windows::Forms::Form
  2.     {
  3.      public:
  4.            Form1(void)
  5.            {
  6.                   InitializeComponent();
  7.                  myThread=gcnew Thread(gcnew ThreadStart(this, &Serveur));
  8.            }
  9. ...


Bon j'ai mis    myThread=gcnew Thread(gcnew ThreadStart(this,&Form1::Serveur));
 

Code :
  1. static void Serveur()
  2. {
  3.     String^message;
  4.     server = gcnew TcpListener(Convert::ToInt32( TB_Port->Text));
  5.        server->Start();
  6. ...


Dans la déclaration de Serveur, il faut enlever le static sinon il a pas accès a des composants non static!
 
Ca compile avec quelques warnings.
Sinon quand on lance le serveur, qu'on l'arrete, on a une erreur si on le redemarre (via le bouton démarrer/arrêter)

Reply

Marsh Posté le 09-03-2010 à 18:29:15    

Romiinet a écrit :


Code :
  1. server = gcnew TcpListener(Convert::ToInt32( TB_Port->Text));




Bon mi il me dit que ce constructeur TcpListener est obsolete mais il compile quand même!
D'apres http://msdn.microsoft.com/fr-fr/li [...] tener.aspx
il en reste 2 de dispo:
TcpListener(IPEndPoint)
ou
TcpListener(IPAddress, Int32)
Tu trouveras tout seul comment corriger en suivant l'aide des constructeurs via le lien si dessus

Reply

Marsh Posté le 10-03-2010 à 12:41:06    

Régénère le projet peut être...

Reply

Marsh Posté le 10-03-2010 à 18:53:03    

Aucune idée, chez moi ca marchait...

Reply

Marsh Posté le 11-03-2010 à 11:56:26    

Romiinet a écrit :

bah enfaite je peu lire les info venant de ma Form1 mais je ne peut pas agir sur eu et modifier leur valeur.
 
sa fonctionne chez toi si tu retire les "//" de la ligne 168 ?

Code :
  1. //RTB_Log->AppendText("Serveur démaré, attente de client...\n" );


 


oui

Reply

Marsh Posté le 11-03-2010 à 22:53:59    

un mot... :D  
 
RTB_Log doit supporter l'accees de multiple thread
(change quelque parameter sur ce RTB_Log )  ... ici je parle sans
rien connaitre!
 
mais pour l'icone , tu change le language du resource
(ou francais(0x40c) , ou anglais(0x409)  )
 
 :hello:

Reply

Marsh Posté le 12-03-2010 à 18:42:15    

Romiinet a écrit :


 
arf peut tu me donner ta version de ton Form1.h si cela ne te dérange pas ? :(  
 


Sous VS 2008 express,
Je crée un projet winform et j'ai remplacé tout ce qu'il y avait dans form1.h par le code que tu as donnée plus et que j'ai modifié comme suit (et je crois sans autre modif au niveau de la génération du projet!):

Code :
  1. #pragma once
  2. bool connected = false;
  3.  
  4. namespace testserveur {
  5.  
  6.     using namespace System;
  7.     using namespace System::IO;
  8.     using namespace System::ComponentModel;
  9.     using namespace System::Collections;
  10.     using namespace System::Windows::Forms;
  11.     using namespace System::Data;
  12.     using namespace System::Drawing;
  13.     using namespace System::Net;
  14.     using namespace System::Net::Sockets;
  15.     using namespace System::Threading;
  16.     using namespace System::Drawing::Imaging;
  17.  
  18.     public ref class Form1 : public System::Windows::Forms::Form
  19.     {
  20.     public:
  21.         Form1(void)
  22.         {
  23.             InitializeComponent();
  24.             myThread=gcnew Thread(gcnew ThreadStart(this,&Form1::Serveur));
  25.         }
  26.  
  27.     protected:
  28.         /// <summary>
  29.         /// Nettoyage des ressources utilisées.
  30.         /// </summary>
  31.         ~Form1()
  32.         {
  33.             if (components)
  34.             {
  35.                 if (myThread->IsAlive) myThread->Abort();
  36.                 delete components;
  37.             }
  38.         }
  39.     private: System::Windows::Forms::TextBox  ^TB_Port;
  40.     protected:
  41.     private: System::Windows::Forms::Button ^BT_Start;
  42.     private: System::Windows::Forms::Label ^LB_ONOFF;
  43.     private: System::Windows::Forms::RichTextBox ^RTB_Log;
  44.     private: System::Windows::Forms::ProgressBar ^PB_Load;
  45.  
  46.     //pour le serveur :
  47.     private: Threading::Thread ^myThread;
  48.     //static car utilisé dans le thread
  49.     private: static TcpListener ^server;
  50.     private: static TcpClient ^client;
  51.     //stream pour lire/ecrire sur le socket
  52.     private: static NetworkStream ^stream;
  53.     // pour le lecteur binaire sur le socket (plus pratique)
  54.     private: static BinaryWriter ^socketbinwrite;
  55.     private: static BinaryReader ^socketbinread;
  56.     //binary Reader sur les fichiers
  57.     private: static BinaryReader ^FichierBinReader;
  58.     private: static BinaryWriter ^FichierBinWrite;
  59.  
  60.     private:
  61.         /// <summary>
  62.         /// Variable nécessaire au concepteur.
  63.         /// </summary>
  64.         System::ComponentModel::Container ^components;
  65.  
  66. #pragma region Windows Form Designer generated code
  67.         /// <summary>
  68.         /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  69.         /// le contenu de cette méthode avec l'éditeur de code.
  70.         /// </summary>
  71.         void InitializeComponent(void)
  72.         {
  73.             System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
  74.             this->TB_Port = (gcnew System::Windows::Forms::TextBox());
  75.             this->BT_Start = (gcnew System::Windows::Forms::Button());
  76.             this->LB_ONOFF = (gcnew System::Windows::Forms::Label());
  77.             this->RTB_Log = (gcnew System::Windows::Forms::RichTextBox());
  78.             this->PB_Load = (gcnew System::Windows::Forms::ProgressBar());
  79.             this->SuspendLayout();
  80.             //
  81.             // TB_Port
  82.             //
  83.             this->TB_Port->Location = System::Drawing::Point(12, 12);
  84.             this->TB_Port->Name = L"TB_Port";
  85.             this->TB_Port->Size = System::Drawing::Size(49, 20);
  86.             this->TB_Port->TabIndex = 0;
  87.             this->TB_Port->Text = L"8085";
  88.             //
  89.             // BT_Start
  90.             //
  91.             this->BT_Start->Location = System::Drawing::Point(67, 10);
  92.             this->BT_Start->Name = L"BT_Start";
  93.             this->BT_Start->Size = System::Drawing::Size(75, 23);
  94.             this->BT_Start->TabIndex = 1;
  95.             this->BT_Start->Text = L"Démarrer";
  96.             this->BT_Start->UseVisualStyleBackColor = true;
  97.             this->BT_Start->Click += gcnew System::EventHandler(this, &Form1::BT_Start_Click);
  98.             //
  99.             // LB_ONOFF
  100.             //
  101.             this->LB_ONOFF->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
  102.                 static_cast<System::Byte>(0)));
  103.             this->LB_ONOFF->Location = System::Drawing::Point(220, 9);
  104.             this->LB_ONOFF->Name = L"LB_ONOFF";
  105.             this->LB_ONOFF->Size = System::Drawing::Size(52, 23);
  106.             this->LB_ONOFF->TabIndex = 2;
  107.             this->LB_ONOFF->Text = L"[OFF]";
  108.             this->LB_ONOFF->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
  109.             //
  110.             // RTB_Log
  111.             //
  112.             this->RTB_Log->Location = System::Drawing::Point(12, 40);
  113.             this->RTB_Log->Name = L"RTB_Log";
  114.             this->RTB_Log->Size = System::Drawing::Size(260, 260);
  115.             this->RTB_Log->TabIndex = 3;
  116.             this->RTB_Log->Text = L"";
  117.             //
  118.             // PB_Load
  119.             //
  120.             this->PB_Load->Location = System::Drawing::Point(12, 306);
  121.             this->PB_Load->Name = L"PB_Load";
  122.             this->PB_Load->Size = System::Drawing::Size(260, 14);
  123.             this->PB_Load->TabIndex = 4;
  124.             //
  125.             // Form1
  126.             //
  127.             this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
  128.             this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
  129.             this->ClientSize = System::Drawing::Size(284, 332);
  130.             this->Controls->Add(this->PB_Load);
  131.             this->Controls->Add(this->RTB_Log);
  132.             this->Controls->Add(this->LB_ONOFF);
  133.             this->Controls->Add(this->BT_Start);
  134.             this->Controls->Add(this->TB_Port);
  135.             this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
  136.             this->Icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon" )));
  137.             this->Name = L"Form1";
  138.             this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
  139.             this->Text = L"Serveur de Test";
  140.             this->ResumeLayout(false);
  141.             this->PerformLayout();
  142.  
  143.         }
  144. #pragma endregion
  145.         private: System::Void BT_Start_Click(System::Object^  sender, System::EventArgs^  e) {
  146.             if(!connected){
  147.                 myThread->Start();
  148.                 this->Text = "Thread Start";
  149.                 this->BT_Start->Text = "Arrêter";
  150.                 this->LB_ONOFF->Text = "[ON]";
  151.             }else{
  152.                 myThread->Abort();    
  153.                 server->Stop();
  154.                 this->Text = "Thread Stop";
  155.                 this->BT_Start->Text = "Démarrer";
  156.                 this->LB_ONOFF->Text = "[OFF]";
  157.                 myThread->Sleep(500);
  158.                 myThread->Abort();
  159.             }
  160.             this->TB_Port->Enabled = connected;
  161.             connected = !connected;
  162.         }
  163.  
  164.          void Serveur()
  165.          {    
  166.             String^message;
  167.             server = gcnew TcpListener(Convert::ToInt32( TB_Port->Text));
  168.             server->Start();
  169.             RTB_Log->AppendText("Serveur démaré, attente de client...\n" );
  170.             client = server->AcceptTcpClient();
  171.  
  172.             stream = client->GetStream();
  173.             socketbinread = gcnew BinaryReader(stream);
  174.             socketbinwrite = gcnew BinaryWriter(stream);
  175.             
  176.             RTB_Log->AppendText("client connecté\n" );
  177.             
  178.             //boucle de reception des messages
  179.             while(message=socketbinread->ReadString())
  180.             {
  181.                 // ------------------------
  182.                 //  # Commande
  183.                 // ------------------------
  184.             }
  185.             
  186.         }
  187.  
  188.  
  189.  
  190.     };
  191. }


Message édité par breizhbugs le 12-03-2010 à 18:43:25
Reply

Marsh Posté le 12-03-2010 à 18:42:15   

Reply

Marsh Posté le 13-03-2010 à 22:32:29    

ah pardon, j'ai donner une chose a essayer
mais pas une reponse.
 
 
j'ai vu un peu ce .net (rien de nouveau) un win-java-VB-com! + lourd!
Rien est hors control  :o  , mais j'ai pas de temp maintenant pour ca.
 
 :D on continue ...
 
RTB_Log est un RichEdit control , c'est similair a  
(ou le meme) de wordpad.
 
1/ l'exception de l'icone , tu a supprimer
un fichier (*.manifest) je crois, ...oublie ce que j'ai dit avant
 
2/ pour RTB_Log , change readonly to read write (pour ecrire)
et aussi  multi-ligne (pour ecrire plus d'une ligne) ... voir propriete.
si ca continue ,  (et tu n a pas de solution direct )
tu fait functionner le program avec un seul thread
... puis tu vois le probleme apres
 
avec form.h il y l'autre cpp ? , ou il'y a main() , voir ca aussi !
 
CTRL+^ pour sauter entre '{'  et la correspondante  '}'  
(va bien aider!)
 

Reply

Marsh Posté le 14-03-2010 à 12:30:29    

Tu as du changer des parametes dans le projet, ca n'a pas l'air de venir du code...
Sinon je crois que cette ligne
System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
est inutile a cause du [STAThreadAttribute]
(en tout cas moi, je ne l'ai pas dans mon main.cpp, pas plus que <windows.h> qui est inutile d'ailleurs)!

Reply

Marsh Posté le 14-03-2010 à 14:36:06    

pour l'icone
 tu a effacer le namespace , tu doit changer ca :
 [complie command de *.resx] (voir propriete sour *.resx)
 outputfilename :
 de : $(IntDir)\$(RootNamespace).$(InputName).resources
 a : $(IntDir)\$(InputName).resources
 
 si un control->InvokeRequired return true ,
 tu doit appeler
 la method ou changer les prorpriete avec Invoke(..) + tu va faire
 des delegate sur le thread qui a cree les controls  
 c'est similair au evenement .. les click , button pressed ...etc
 il manque tros de details mais..
 
.. si tu ne connais pas ces chose avant l'apparition du .Net
 , tu va trouver quelque (ou beaucoup !) des problemes
 
/1 pour eviter ca  
 tu doit cree ta form (et ses controls) par le thread qui va changer
 les attribut ou appeler le method , ...( sont tous des methods)
 
/2 tu doit trouver un plan pour ca , avant de faire le code.
 
tu peut chercher encore :
tu peut voir aussi la haut ,  
http://forum.hardware.fr/hfr/Progr [...] ujet-1.htm
 
.. ou bien lance ca et va cree ce client-serveur avec C (en console!)
http://forum.hardware.fr/hfr/Progr [...] ujet-1.htm
 
 :hello:  
 
 

Reply

Marsh Posté le 14-03-2010 à 19:09:11    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed