Hallo Matthias,
nun einmal ganz langsam. Du hast 2 Rechner die du miteinander verbinden möchtest. Sagen wir mal Rechner 1 ist R1 und Rechner 2 ist R2.
Entweder R1 oder R2 muss als Server fungieren. Der andere Rechner dann als Client. Beide Rechner kommunizieren ueber einen Port. Sagen wir mal Port 12345.
Den Server schickst du eigentlich nur auf abhorchen. Wenn dann eine Anfrage hereinkommt, so muss sie akzeptiert werden. Sobald dies geschehen ist, besteht eine Verbindung der beiden Rechner.
Wenn der Server auf abhorchen ist, musst du mit dem Clienten einen Connect zu dem Server machen. Ergo musst du die Adresse des Rechners wissen. Da sich die IP stetig ändert hast du nun das erste Problem 
Aber dazu gibt es eine Lösung *zwinker*
Es gibt das Programm DNS2Go ( Ich weiss jetzt aber nicht ob es kostenfrei ist, aber es gibt dann noch andere Tools die des koennen!)
DNS2GO:
Du registrierst dich dort und bekommst dann eine Adresse. Sagen wir mal http://Matthias.Dns2go.com.
Du hast dann von Dns2go einen Clienten. Den musst du bei dir installieren und starten. Dieser legt sich dann in die TNA.
Wenn du dann die Adresse eingibst, so landest du bei deiner IP! Bsp. Ein Appache Webserver + DNS2Go --> Ein und die selbe Adresse und landest immer auf deinen Rechner 
Aber den Appache Webserver brauchen wir nicht. Wir wollen ja nur die IP haben und die bekommen wir auf diesen Wege heraus.
Wenn du mittels Winsock einen Connect machst, so kannst du auch eine URL angeben. Ergo nehmen wir diese, di du zum Bsp. ueber DNS2GO bekommen hast.
Das bedeutet, egal wie du dein Rechner ein und ausschaltest. Wir haben immer die richtige Adresse 
So nun sollte das grösste Problem gelöst sein und wir koennen das Tool schreiben.
Ein Bsp. könnte so ausschauen.
Deine Adresse bei DNS2GO -> Matthias.DNS2GO.Com
Eingestellter Port bei Winsock 12345
Protokoll = Http
Program Start:
ResponseTimeOut=20*60 '20 Sekunden
Connect zur Adresse Matthias.DNS2GO.com’Winsock1.connect …
Zeit ermitteln 'Start = timer
DO Schleife
Doevents
* Connect erfolgt -> Verbindung besteht -> Sub verlassen
loop until timer-start > ResponseTimeOut
'Connect kann nicht hergestellt werden -> Als Server fungieren lassen
winsock1.close
winsock1.listen
So koenntest du die Sache anfangen. Der rest erklärt sich dann von selbst 
MfG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]