ClientSocket-Problem beim Verbindungsaufbau (war: chatprogramm)



  • Hallo,

    habe ein kleines Chatprogramm geschrieben, bei dem es irgendwie einen Fehler gibt.

    Sobald ich auf "Connect" klicke öffnet sich ein Fenster, wo man eine Adresse eingeben muss - ich dachte es wäre die IP-Adresse, aber irgendwie gibt er ständig nur aus "Error connecting to ....." (..... = das was man eingegeben hat) egal, ob ich das Programm übers Internet versuche, oder auch nur über LAN.

    Hier einmal der Quelltext vom Connect-Button:

    if (ClientSocket1->Active)
       {
          ClientSocket1->Active = false;
       }
       if (InputQuery("Computer to connect to", "Address Name:", Server))
       {
          if (Server.Length() > 0)
          {
              ClientSocket1->Host = Server;
              ClientSocket1->Active = true;
              Verbindungsuchen1->Checked = false;
          }
       }
    

    Kann mir jemand sagen, was ich falsch mache? Wenn ihr mehr informationen braucht bitte einfach schreiben, was ihr noch wissen müsstet, ich antworte dann.

    Gruß
    MWJK

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Du brauchst zum senden und zum empfangen Server + Clienten. Versuche mal das Programm auf einen anderen Rechner im gleichen Netzwerk zu Connecten dann sollte es gehn Dein Programm muss Server gleichzeitig Client sein .

    ClientSocket + ServerSocket

    Das habe ich vor 2 Jahren mal geschriebn geht auch mit 2 Rechnern im gleichen Netzwerk : Gruss

    //----------------------------------------------------------------------------
    
    //----------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "main.h"
    //---------------------------------------------------------------------------
    #pragma link "ScktComp"
    #pragma resource "*.dfm"
    TChatForm *ChatForm;
    //---------------------------------------------------------------------------
    __fastcall TChatForm::TChatForm(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TChatForm::FileListenItemClick(TObject *Sender)
    {
      FileListenItem->Checked = !FileListenItem->Checked;
      if (FileListenItem->Checked)
      {
         ClientSocket->Active = false;
         ServerSocket->Active = true;
         StatusBar1->Panels->Items[0]->Text = "Listening...";
      }else
      {
         if (ServerSocket->Active)
         { 
            ServerSocket->Active = false;
         }
         StatusBar1->Panels->Items[0]->Text = "";    
      }          
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::FileConnectItemClick(TObject *Sender)
    {
      if (ClientSocket->Active)
      { 
        ClientSocket->Active = false;
      }   
      if (InputQuery("Computer verbindet zu", "Address Name:", Server))
      {
         if (Server.Length() > 0)
         {
            ClientSocket->Host = Server;
            ClientSocket->Active = true;
            FileListenItem->Checked = false;  
         }
      }
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::Exit1Click(TObject *Sender)
    {
      ServerSocket->Close();
      ClientSocket->Close();
      Close();   
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::Memo1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    
      if (Key == VK_RETURN)
      {
    
         if (IsServer){ServerSocket->Socket->Connections[0]->SendText(
             ("[ ")+
             Edit1->Text
             +(" ]")+(" : ")
             +Memo1->Lines->Strings[Memo1->Lines->Count - 1]);
      }
         else
         { ClientSocket->Socket->SendText(Memo1->Lines->Strings[
           ("[ ")+
           Edit1->Text
           +(" ]")+(" : ")
           +Memo1->Lines->Count -1]);
         }
        Memo1->Clear();
      }
    
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::FormCreate(TObject *Sender)
    {
      FileListenItemClick(NULL);
      Edit1->Font->Color = ColorDialog1->Color;
    
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ClientSocketConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      StatusBar1->Panels->Items[0]->Text = "Verbunden mit : " + Socket->RemoteHost;
      Edit3->Text = Socket->RemoteHost;
      StatusBar1->Panels->Items[1]->Text = "Verbunden Local : " + Socket->LocalHost;
      Edit2->Text = Socket->LocalHost;
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::Disconnect1Click(TObject *Sender)
    {
      ClientSocket->Active = false;
      ServerSocket->Active = true;
      StatusBar1->Panels->Items[0]->Text = "Warten auf Antwort...";
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ClientSocketRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      String col = Socket->ReceiveText();
      Memo2->Lines->Add(Socket->ReceiveText());
      Memo2->Font->Color = StrToInt(col);
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ServerSocketClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      String col = Socket->ReceiveText();
      Memo2->Lines->Add(Socket->ReceiveText());
      Memo2->Font->Color = StrToInt(col);
    
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ServerSocketAccept(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      IsServer = true;
      StatusBar1->Panels->Items[0]->Text = "Verbunden zu: " + Socket->RemoteAddress;
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ServerSocketClientConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      Memo2->Lines->Clear();   
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ClientSocketDisconnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      FileListenItemClick(NULL);   
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ClientSocketError(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
      Memo2->Lines->Add("Fehler beim Verbinden zum:" + Server);
      ErrorCode = 0;
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ServerSocketClientDisconnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      StatusBar1->Panels->Items[0]->Text = "Warten auf Antwort...";
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::SendenClick(TObject *Sender)
    {
    Memo2->Lines->Add(Edit1->Text);
    
    if (IsServer)
    {
    
         ServerSocket->Socket->Connections[0]->SendText(ColorDialog1->Color+
         ("[ ")+
         Edit1->Text
         +(" ]")+(" : ")
         +Memo1->Lines->Strings[Memo1->Lines->Count - 1]);
    }
    else
    {
         ClientSocket->Socket->SendText(ColorDialog1->Color+
         ("[ ")+
         Edit1->Text
         +(" ]")+(" : ")
         +Memo1->Lines->Strings[
         Memo1->Lines->Count -1]);
    
    }
         Memo1->Clear();
    }
    //---------------------------------------------------------------------------
    void __fastcall TChatForm::ColorClick(TObject *Sender)
    {
    ColorDialog1->Execute();
    Edit1->Font->Color = ColorDialog1->Color;
    }
    //---------------------------------------------------------------------------
    


  • Ist so ähnlich wie meines, kann meins ja nochma durchschauen anhand dieses quelltextes, aber ich erkenne z.Z. keinen Unterschied weshalb mein Programm nicht gehen würde - es funktioniert an sich ja, aber er verbindet nicht - weder über LAN (gleiches Netzwerk) noch über Internet - wobei LAN auch nur ein Test war, weil es nachher über Internet laufen soll.

    Gruß
    MWJK



  • Ja habe es aus dem Besispeieln habe es aber damals abgeändert und noch einige veränderungen von mir rein gehauen mit 2 Rechner geht es und wenn du es über das Netz machen willst wie bei msn brauchste du extern ein Server mit Datenbank wo du die ganzen Kundenoder User gespeichert hast und darüber alles abfragst hatte auch schon mal so ein Dinge geschriebn wie gesagt es funktioniert so wie ich es dir gegen habe und wenn du was brauchst um über das Internet zu verbinden habe ich auch mal was geschriebn für den Messie als versuch und es geht auch kann es dir ja mal per mail zusenden villeicht kannst du was anfangen damit . Ich hatte keine Zeit mehr dazu wegen arbeit ... GRuss

    PS Hat was mit dem Socket zu tun also ein Programm pro rechenr laufen lassen und dann beide starten : PS beide Rechner müssen aber Unterschiedliche IP besitzen. Also zum Beispiel Rechner 1: 192.168.1.1 und Rechner 2: 192.168.1.2 dann tuste mit beiden Verbinden und es geht .... 😃



  • Hi,

    werde es wie gesagt mal versuchen, aber mehr ging es mir ja ums internet.
    Wäre cool, wenn du mir das per Mail mal zuschicken könntest:

    Manu_Weitzel@email.de

    Ansonsten danke ich dir für dieses Programm hier, werde es bei gelegenheit mal ausprobieren und ich danke dir für dein Angebot mir das andere mal per Mail zukommen zu lassen, weil das mit Internet ist mir momentan wichtiger ;).

    Gruß
    MWJK



  • Auf der "Adresse" muss auch die entsprechende Server-Variante deines Programmes laufen (TServerSocket), und beide Seiten müssen auf demselben Port arbeiten.

    Teste einfach das beim BCB mitgelieferte Chat-Beispiel gründlich aus, das funktioniert zuverlässig. Wenn du die Funktionsweise verstanden hast kannst du es nach Belieben abwandeln oder neu schreiben.



  • Jansen schrieb:

    Teste einfach das beim BCB mitgelieferte Chat-Beispiel gründlich aus, das funktioniert zuverlässig.

    Nun ja, ich wäre froh würde es das tun 😉 ... bei dem Chat-Beispiel das bei den Beispielen hier dabei war ist bei mir leider keine .exe-Datei dabei und beim kompilieren gibt es die meldung, dass die vcl50.lib fehlt ...

    habe aber nichts daran verändert ...

    Gruß
    MWJK



  • Ja ok ist kein Problem :

    Ich habe ein anderes Problem villeicht kannst du mir da helfen :

    Ich schreibe seid fast 2 Jahren nur noch php Seiten und mysql Datenbanken und habe jetze wieder mal das Borland rausgeholt . Ich wollte für kundne eine Präsentation machen und sie per exe ausführen lassen. Es sollte aber auch einKurzer wmv oder avi film mit in die exe. Wie bekomme ich den mit eingebunden und kompiliert er kann auch enpackt werden und nach betarchten mittels programm wieder gelöscht werden. Habe es mit OLEContainer probiert geht aber nix sitze seid 3 Stunden dran villeicht hast du was dafür ... Danke schicke dir jetze die mail Bis denne 😉 Gruss Denis



  • Joar, das gehört jetz nich hierher - aber wenn du nen Thread dafür offen hast schau ich da gleich mal und wenn mir was dazu einfällt schreib ich das auch dort.

    Danke dass du die Mail schickst.

    Gruß
    MWJK



  • MWJK:
    Na dann leg halt ein neues Projekt an und kopier den Quelltext aus dem Beispiel!

    Werden bei deiner Firma eigentlich noch "Programmierer" gesucht? Da könnte ja offenbar sogar ich als weitgehender Laie noch angestellt werden ...;)

    Denis:
    Bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!



  • @Jansen:
    Nein, werden keine Programmierer gesucht und ich bin dort auch nicht als Programmierer angestellt - wir haben keine direkten Programmierer und brauchen auch eigentlich keine, das was die Firma braucht mach ich und was ich nicht kann versuche ich mir irgendwo anzueignen 😉

    zum Thema:
    Dann werd ich das mal versuchen und hoffen dass es klappt - wollte halt am Beispiel nix rumhantieren ...

    Gruß
    MWJK



  • Hast post so ich mache mich jetz vom Acker gutes Nächtle noch an alle .....



  • Jo, danke für die EMail und dir auch ne Gute Nacht!

    Gruß
    MWJK



  • Mal eine Frage!

    Habe jetzt schon öfters gelesen dass bei Borland ein Chatbeispiel dabei wäre!
    Ich finds nur irgendwie nich?!? ist das ein mitgeliefertes Projekt? oder ist der Code in der Hilfe? irgendwie bin ich grade nicht in der richtigen spur 😃

    aber ihr könnt mir ja sicherlich helfen!

    Nico



  • /Examples/Internet/Chat/

    (bei BCB6)



  • achso schade, ich habe borland 5



  • Nico18 schrieb:

    achso schade, ich habe borland 5

    Seufzer... Beim BCB 5 befindet sich das untet ...Examples\Internet\Chat...



  • bei mir nicht 😕

    habe auch extra nochmal die festplatte durchsucht.



  • Welche Version hast Du denn? Ab der Professional ist es dabei. Muß ja dann schon die kostenlose sein. Standard, oder wie hieß die...



  • Habe die Lizenz über die Schule!


Anmelden zum Antworten