TCP Server+Client Problem

02/19/2010 13:05 Banana.Crafts#1
So ich wollte mal TCP ausprobieren:
Dafür hab ich nach Vorlage ein Client und ein Server erstellt!
Auf dem eigenen PC funktioniert das ja auch!
Nur was muss ich machen damit ich einem Freund, von dem ich die IP nicht weiß, aber er den Server offen hat, einen Text schicken kann?

Der Server:
PHP Code:
Global Const $IP = @IPAddress1
Global Const $PORT 31758

Global $mainsocket

TCPStartup
()
$mainsocket TCPListen($IP$PORT
If 
$mainsocket = -1 Then MsgBox(0"Error""Konnte nicht verbinden!")


While 

    $acceptedSocket 
TCPAccept($mainsocket)
If 
$acceptedSocket <> -1 Then 
        $receivedData 
TCPRecv($acceptedSocket1024
       
MsgBox(0"Message"$receivedData)
       
TCPCloseSocket($acceptedSocket)
EndIf
WEnd 
Und der Client:
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Chat GUICreate("Chat"330180192124)
GUISetBkColor(0x00FF00)
$edit=GUICtrlCreateEdit(""10327153)
GUICtrlSetBkColor(-10xFFFFFF)
$Send GUICtrlCreateButton("Send"5615222725)
GUICtrlSetBkColor(-10x00FFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $socket

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
Func _senden()
        Case 
$Send
            $text
=GUICtrlRead($edit)
            
_senden()
    EndSwitch
WEnd

TCPStartup
() ; TCP wird initialisiert
$socket 
TCPConnect("Hier eben die IP die ich nicht weiß"4321)   
If 
$socket = -1 Then 
    MsgBox
(16"Error""Die Verbindung zum Server konnte nicht hergestellt werden!")
EndIf  
$sendedBytes TCPSend($socket$text
If 
$sendedBytes 0 Then 
    MsgBox
(16"Error""Das Paket konnte nicht gesendet werden."
EndIf  
TCPCloseSocket($socket)
TCPShutdown() 
EndFunc 
Ich hoffe ihr könnt mir weiterhelfen!

Ich bedanke mich jetzt schon mal!

P.S.: Ich glaube am Server stimmt auch etwas nicht!
02/19/2010 18:44 .nAno#2
die IP herausfinden und einfügen? o0

und ich kann dir auch nicht wirklich glauben das es bei dir funktioniert :D
02/20/2010 10:25 Banana.Crafts#3
Super, aber wenn ich einen allgemeinen Chat haben will?
Ja ich hab das ein wenig verändert, aber sonst funktioniert es!
Kannst du mir sagen wie ich es anstelle das er mit mir connectet ohne seine IP zu wissen?
02/20/2010 11:42 .nAno#4
wenn du zu einem Server connecten möchtest, brauchst du die Adresse des Servers, entweder in Form einer IP oder als URL, etc. , anders kannst du einfach nicht verbinden, woher soll der Client denn wissen zu wem oder was er eine Verbindung aufbauen soll... du brauchst also irg. woher seine IPadresse :awesome:
02/20/2010 13:26 Banana.Crafts#5
Ja schon klar, aber ich möchte ja, dass mein Server mit einem Client connectet, von dem ich dem ich die IP nicht weiß!
So das der Client praktisch anfragt, und der Server dann connectet und Packets empfängt!
02/20/2010 13:35 4PR28U#6
um die ip adresse einer seite rauszufinden, gibt es für firefox z.b. das addon, das sich flagfox nennt.
02/20/2010 13:51 Banana.Crafts#7
Hmm, nochmal
Ich möchte einen Clienten, der sich mit meinem Server(meiner IP) connectet!
Dieser Client soll dann mir ein Packet schicken, das ich dann mit meinem Server empfange!
Allerding muss man dass mit TCPListen() machen, ich aber nicht weiß, auf welche IP ich warten soll!
Gibt es da keinen 'AutoIt-Befehl?
Aber danke für die Bemühungen!
02/20/2010 14:59 ^darkwing#8
Der Server hat die Lokale IP von sich selbst z.B. "192.168.2.10".

Dein Problem ist die dynamische IP Vergebung.
Du solltest dir mal DynDNS angucken. Es gibt auch andere Wege.
Beispiel: Server schickt zwischendurch anfragen an eine PHP Seite, die die IP loggt. Der Client wertet die Log aus und weiß die IP zum Server.
02/20/2010 21:09 Banana.Crafts#9
hmm oke, danke!
Aber kannst du mir vll eein Script geben?
Ich hab echt nix brauchbares gefunden!
Das wäre echt cool!
Aber es ist ja keine Seite, deswegen ist das ein bisschen komisch!
Aber auf jeden Fall Danke!
Und ein Script wäre echt cool!
02/20/2010 21:58 ^darkwing#10
So schwer ist es nicht zu schreiben. Hier, eben geschrieben.
PHP Code:
<html>
<head>
</head>
<body>
<?
$serverIp 
"$REMOTE_ADDR";
$myFile "ip.html";
$fh fopen($myFile'w');
fwrite($fh$serverIp);
fclose($fh);
?>
</body>
</html>
In "ip.html" steht direkt die aktuelle IP. Wie du mit AutoIT diese Seite ausließt kann ich dir nicht erklären. Gibt aber irgendwo hier ein AutoIT Browserbot Tutorial in dem gezeigt wird, wie man an den Quelltext rankommt. ;)