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

  FORUM HardWare.fr
  Programmation
  C++

  A SUPPRIMER MERCI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

A SUPPRIMER MERCI

n°1970940
Romiinet
Posté le 03-03-2010 à 18:17:19  profilanswer
 

A SUPPRIMER MERCI

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

---------------
Achats & Ventes
mood
Publicité
Posté le 03-03-2010 à 18:17:19  profilanswer
 

n°1971735
breizhbugs
Posté le 07-03-2010 à 13:04:56  profilanswer
 

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

n°1971819
breizhbugs
Posté le 07-03-2010 à 22:24:13  profilanswer
 

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?)

n°1972056
breizhbugs
Posté le 08-03-2010 à 19:03:03  profilanswer
 


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)

n°1972405
breizhbugs
Posté le 09-03-2010 à 18:29:15  profilanswer
 

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

n°1972629
breizhbugs
Posté le 10-03-2010 à 12:41:06  profilanswer
 

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

n°1972777
breizhbugs
Posté le 10-03-2010 à 18:53:03  profilanswer
 

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

n°1972952
breizhbugs
Posté le 11-03-2010 à 11:56:26  profilanswer
 

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

n°1973151
__tomjost
c'est un pseudo !
Posté le 11-03-2010 à 22:53:59  profilanswer
 

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:

n°1973380
breizhbugs
Posté le 12-03-2010 à 18:42:15  profilanswer
 

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
mood
Publicité
Posté le 12-03-2010 à 18:42:15  profilanswer
 

n°1973595
__tomjost
c'est un pseudo !
Posté le 13-03-2010 à 22:32:29  profilanswer
 

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!)
 

n°1973632
breizhbugs
Posté le 14-03-2010 à 12:30:29  profilanswer
 

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)!

n°1973656
__tomjost
c'est un pseudo !
Posté le 14-03-2010 à 14:36:06  profilanswer
 

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:  
 
 

n°1973709
breizhbugs
Posté le 14-03-2010 à 19:09:11  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  A SUPPRIMER MERCI

 

Sujets relatifs
Probleme variable fichier [ langage C ][C] Petites questions (débutant)
SDL + CAjouter les classes Qt de Network dans Visual Studio
langage C transformée de Hough[C++/CLI] Dispose et delete
[C/C++] C ou C++ pour des performances optimales?Créer un serveur pour SON jeu vidéo!!
C - attendre n milliseconds entre 2 iterations d'une boucle 
Plus de sujets relatifs à : A SUPPRIMER MERCI


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