Chat programma via internet

Status
Niet open voor verdere reacties.

Dafke123

Gebruiker
Lid geworden
29 dec 2007
Berichten
14
Hallo,

Ik was bezig met de sockets van borland c++ builder te leren. Borland levert hier een standaard voorbeeld van en dat werkt perfect binnen mijn netwerk. Maar op het moment dat ik dit via internet probeer, wil het helaas niet lukken. Ik heb al geprobeerd een poort open te zetten en deze ook aangegeven binnen de code, maar dit lukt ook niet. Waarschijnlijk zie ik kleins over het hoofd. Kan iemand mij vertellen, hoe ik dit moet doen?

Alvast bedankt!

Hieronder de standaard code die als voorbeeld van Borland werd meegegeven. Denk dat deze code het handigste is, om te laten.

Code:
//----------------------------------------------------------------------------
//Borland C++Builder
//Copyright (c) 1987, 1997-2002 Borland International Inc. All Rights Reserved.
//----------------------------------------------------------------------------
//---------------------------------------------------------------------------
#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 to connect to", "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(
         Memo1->Lines->Strings[Memo1->Lines->Count - 1]); }
     else
     { ClientSocket->Socket->SendText(Memo1->Lines->Strings[
        Memo1->Lines->Count -1]);}
  }   
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::FormCreate(TObject *Sender)
{
  FileListenItemClick(NULL);   
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;   
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::Disconnect1Click(TObject *Sender)
{
  ClientSocket->Active = false;
  ServerSocket->Active = true;
  StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ClientSocketRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Add(Socket->ReceiveText());  
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  Memo2->Lines->Add(Socket->ReceiveText());  
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketAccept(TObject *Sender,
      TCustomWinSocket *Socket)
{
  IsServer = true;
  StatusBar1->Panels->Items[0]->Text = "Connect to: " + 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("Error connecting to:" + Server);   
  ErrorCode = 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TChatForm::ServerSocketClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
 
Als het op jouw interne netwerk goed werkt, dan moet je het probleem toch bij je router zoeken lijkt me. Ik weet niet wat je verstaat onder een port openzetten, bedoel je daarmee dat je de port geforward hebt naar het interne IP nummer van de machine waar het draait ?
En hoe maak je verbinding vanaf inet .. via IP nummer ?
 
Bedank voor de snelle reactie!

Met poort open zetten bedoel ik inderdaad port forwarden. Het ipadres wat ik invul is het internet ip adres, achterhaald door www.watismijnip.nl

EDIT: Mijn windows firewall heb ik tijdelijk uitstaan.
 
Laatst bewerkt:
Het ipadres wat ik invul is het internet ip adres, achterhaald door www.watismijnip.nl

Daar gaat het fout, via die website krijg je je externe IP nummer te zien (IP nummer van je router aan de internet kant, zeg maar) .. je forward nu eigenlijk de port naar de router zelf :D
Je moet dus vanaf de router de port forwarden naar het interne IP adres van die machine.

Ik weet niet wat voor OS je draait op die chat-bak ?

Start - uitvoeren - tik "CMD" - in het zwarte boxje moet je ff IPCONFIG /ALL tikken, daar krijg je het IP nummer te zien.
 
Laatst bewerkt:
Ik heb mezelf net niet helemaal duidelijk gemaakt. Ik bedoel in het chatprogramma vul ik het ip-adres, dat ik via watismijnip.nl krijg, in. Dat lijkt me toch goed?

Misschien een stomme vraag, maar als ik bijvoorbeeld de poort van ftp, http, of imap toewijs bij het programma. Dan hoeft de poort toch niet geforward te worden, omdat deze eigenlijk altijd al dataverkeer toelaat.
 
Ik weet niet of dat programma idd zo werkt, zal dan wel, aangezien het werkt op je interne netwerk ... maar als je geen port forward, weet je iig zeker dat het niet gaat werken vanaf buitenaf.
 
Maar neem dan als voorbeeld skype. Hier hoef ik toch ook niet eerst een port te forwarden, om dit werkend te krijgen. Of zie ik iets over het hoofd?
 
Maar neem dan als voorbeeld skype. Hier hoef ik toch ook niet eerst een port te forwarden, om dit werkend te krijgen. Of zie ik iets over het hoofd?

Klopt, maar dat is verkeer van binnen naar buiten, wat jij wilt is andersom.
 
Hoezo is dat andersom. Als ik bij pc A iets verstuur (dus van binnen naar buiten), ontvang pc B het (dus van buiten naar binnen), toch?
 
Hoezo is dat andersom. Als ik bij pc A iets verstuur (dus van binnen naar buiten), ontvang pc B het (dus van buiten naar binnen), toch?

Wat verstuur je ? E-mail bedoel je ?
Edit: Het zou geen goede zaak zijn als alles toegestaan is van buiten naar binnen, als in: iedereen kan zo op je netwerk komen ..
 
Nee, ik heb het nog steeds over skype

Als ik iets naar jou stuur, gaat het van binnen naar buiten. Maar als jij mijn skype-bericht ontvangt, dan gaat het toch van buiten naar binnen? Ik heb nooit voor skype een poort moeten forwarden. Nu wil ik graag dat mijn example chat programma ook zo communiceert, zonder dat ik een poort moet forwarden of andere rare trucs moet uithalen.
 
Dat wordt geregeld door NAT in je router, maar dat wordt nogal een lang verhaal. Een portforward kost je hooguit 2 minuten en is niet zo moeilijk ... hoe je een chat proggie moet schrijven zonder porten te forwarden zou ik niet weten.
 
Iemand een idee hoe dit moet?

In het algemeen werken chat programma's volgens het client-server model.

In het kort houd dit in dat je 1 centrale server heeft die alle inkomende verbindingen accepteerd. Als jij inlogt op je chat programma maak je verbinding met die server. Als je dan een berichtje naar die server stuurt zoekt de server naar de mogelijkheid om deze door te sturen naar degene die jij graag wil bereiken. Dat kan omdat de ontvanger OOK is verbonden met de server, als diegene is ingelogd natuurlijk.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan