_server()
func _server()
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("192.168.178.20", 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
If $acceptedSocket <> -1 Then; Wenn $acceptedSocket ungleich -1 ist, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
EndIf
WEnd
TCPCloseSocket($acceptedSocket)
EndFunc
Client:
Code:
$ip = InputBox("Test","IP eingeben","")
$port = "4321"
$x = InputBox("Test","testnachricht eingeben","")
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect($ip,$port) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
$sendedBytes = TCPSend($socket,$x) ; Sendet den Text an unseren verbundenen Socket
If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
EndIf
TCPCloseSocket($socket)
TCPShutdown()
Der erste test war erfolgreich am router wird das packet direkt zum lan adapter meines rechners geschickt, sobald ich mit dem client auf ok geklickt habe versendet er das packet, allerdings kriege ich in meiner msg box vom server nicht den inhalt der übertragenen daten sprich meine test nachricht kommt nicht an warum?! o.o
ersetzt man beide ips jeweils durch den localhost, wird der string fehlerfrei übertragen...
daraus folgt, das das problem nicht am script an sich liegt, sondern warscheinlich an deinen netzwerkeinstellungen.
Jepp ist mir auch aufgefallen ABER in meinem router ist es soweit richtig, ab und zu kommt tatsächlich auch was an, wenn ich es öfters probiere zb... kann es mit lagg problemen zusammen hängen? kann man da ne func für machen?
#include <GUIConstantsEx.au3> Opt('MustDeclareVars', 1) Example() Func Example() ; Set Some reusable info ; Set your Public IP address (@IPAddress1) here. ; Local $szServerPC = @ComputerName ; Local $szIPADDRESS = TCPNameToIP($szServerPC) Local $szIPADDRESS = @IPAddress1 ;~ @IPAddress1 Local $nPORT = 33891 Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted Local $msg, $recv ; Start The TCP Services ;============================================== TCPStartup() ; Create a Listening "SOCKET". ; Using your IP Address and Port 33891. ;============================================== $MainSocket = TCPListen($szIPADDRESS, $nPORT) ; If the Socket creation fails, exit. If $MainSocket = -1 Then Exit ; Create a GUI for messages ;============================================== $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200) $edit = GUICtrlCreateEdit("", 10, 10, 280, 180) GUISetState() ; Initialize a variable to represent a connection ;============================================== $ConnectedSocket = -1 ;Wait for and Accept a connection ;============================================== Do $ConnectedSocket = TCPAccept($MainSocket) Until $ConnectedSocket <> -1 $szIP_Accepted = SocketToIP($ConnectedSocket) While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop $recv = TCPRecv($ConnectedSocket, 8192) If @error Then ExitLoop If $recv <> "" Then GUICtrlSetData($edit, $szIP_Accepted&" > "&$recv&@CRLF&GUICtrlRead($edit)) IniWrite(@ScriptDir&"/Oukaresvtcp.ini", $recv) EndIf WEnd If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket) TCPShutdown() EndFunc Func SocketToIP($SHOCKET) ; Function to return IP Address from a connected socket. Local $sockaddr, $aRet $sockaddr = DllStructCreate("short;ushort;uint;char[8]") $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _ "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr)) If Not @error And $aRet[0] = 0 Then $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3)) If Not @error Then $aRet = $aRet[0] Else $aRet = 0 EndIf $sockaddr = 0 Return $aRet EndFunc ;==>SocketToIP
PHP Code:
Opt('MustDeclareVars', 1) Example() Func Example() ; Set Some reusable info ;-------------------------- Local $ConnectedSocket, $szData ; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address ; Local $szServerPC = @ComputerName ; Local $szIPADDRESS = TCPNameToIP($szServerPC) Local $szIPADDRESS = "xxx.xxx.xxx.xxx" Local $nPORT = 33891 ; Start The TCP Services ;============================================== TCPStartup() $ConnectedSocket = -1 $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT) If @error Then MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error); If there is no error loop an inputbox for data to send to the SERVER. Else While 1;Loop forever asking for data to send to the SERVER ;~ $szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:") ;~ If @error Or $szData = "" Then ExitLoop; If they cancel the InputBox or leave it blank we exit our forever loop TCPSend($ConnectedSocket, FileRead(@ScriptDir&"/Oukatcp.ini")) ; We should have data in $szData... lets attempt to send it through our connected socket. If @error Then ExitLoop ; If the send failed with @error then the socket has disconnected sleep(5000) WEnd EndIf EndFunc
ich hab das mit den scripts jetzt so realisiert und funktioniert einwandfrei, wie kann ich das jetzt hinkriegen das er nicht den neuen inhalt hinzufügt, sondern den alten überschreibt? Haste dafür ne lösung?
Hey,
Ich möchte kurz hinzufügen, dass ich immer das selbe Problem hatte.
Mit
PHP Code:
Do $recv = TCPRecv($ConnectedSocket, 8192) Until $recv<>""
funktioniert es dann. Manchmal muss man die Funktion öfter ausführen, damit sie was gutes ausspuckt =).
Um sicher zu gehen, dass das Packet nicht wirklich leer ist, kannst auch noch Timer einbauen. In der Regel dauert der Codeabschnitt den ich gezeigt habe NIE länger als eine halbe Sekunde.
Viel Glück
Edit: Auch wenn es schon geht, verwende meinen Codeabschnitt, denn deiner funktioniert zwar, ist jedoch (soweit ich mich nicht verlesen habe xD) etwas umständlicher und langsamer.
Edit2: Falls du mal i-was mit Tcp über hamachi oder Wippien oder so machst, aknnst du so die IP ganz leicht herausfinden:
Hey,
Ich möchte kurz hinzufügen, dass ich immer das selbe Problem hatte.
Mit
PHP Code:
Do
$recv = TCPRecv($ConnectedSocket, 8192)
Until $recv<>""
funktioniert es dann. Manchmal muss man die Funktion öfter ausführen, damit sie was gutes ausspuckt =).
Um sicher zu gehen, dass das Packet nicht wirklich leer ist, kannst auch noch Timer einbauen. In der Regel dauert der Codeabschnitt den ich gezeigt habe NIE länger als eine halbe Sekunde.
Viel Glück
Edit: Auch wenn es schon geht, verwende meinen Codeabschnitt, denn deiner funktioniert zwar, ist jedoch (soweit ich mich nicht verlesen habe xD) etwas umständlicher und langsamer.
Edit2: Falls du mal i-was mit Tcp über hamachi oder Wippien oder so machst, aknnst du so die IP ganz leicht herausfinden:
$adapterBuffer = ""
$adapterBuffer_pointer = ""
DllClose($dll)
If $FoundIP = "" Then Return SetError(1, 0, "0.0.0.0")
Return $FoundIP EndFunc ;==>GetHamachiIP
}
Jo hab ich auch herrausgefunden danke, du sag mal weißt du wie ich ne ini datei verschicken kann und zwar so das ein anderes autoit prog auf die verschickte ini permanent zugreifen kann aber der inhalt sich permanent auch verändern kann? bzw wie überschreib ich ne vorhandene ini datei mit der neuen?
Hm,
ich denke am leichtesten geht es, wenn du die komplette .ini Datei auf der einen Seite mit FileRead ausliest, dann per TCP verschickst ( Damit das Empfängerprogramm erkennt, dass es die .ini ist, kannst du ja zum Beispiel den Text **inidatei** mitschicken, das Empfängerprogramm checkt ob **inidatei** in der angekommenen Nachricht steckt und handelt dementsprechend. Du brauchst dafür die Befehle Stringinstr und Stringreplace.)
und das Empfängerprogramm erstellt eine .ini und schreibt den empfangenen Text herein. Um eine vorhandene .ini zu überschreiben lasst du einfach die alte per FileDelete löschen.
Hm,
ich denke am leichtesten geht es, wenn du die komplette .ini Datei auf der einen Seite mit FileRead ausliest, dann per TCP verschickst ( Damit das Empfängerprogramm erkennt, dass es die .ini ist, kannst du ja zum Beispiel den Text **inidatei** mitschicken, das Empfängerprogramm checkt ob **inidatei** in der angekommenen Nachricht steckt und handelt dementsprechend. Du brauchst dafür die Befehle Stringinstr und Stringreplace.)
und das Empfängerprogramm erstellt eine .ini und schreibt den empfangenen Text herein. Um eine vorhandene .ini zu überschreiben lasst du einfach die alte per FileDelete löschen.
wenn ein script auf diese datei zugreift die er löschen möchte und neuschreiben mag, kann dann der script net abscheißen wenn er nen iniread ausführt indem moment wo die datei gelöscht wurde?
Server/Client Problem 06/27/2011 - Minecraft - 4 Replies Hallo Leute hab wieder mal ein Problem
Also ich spiele seit einer Weile Minecraft und habe gedacht, dass ich mir einen Server machen könnte. Server Software heruntergeladen, alles ''entpackt'' und Server personalisiert. Dann kam der erste Versuch und ich merkte, dass ich den Minecraft Client und Server nicht gleichzeitig laufen lassen kann:
Minecraft-an funzt
Server-zu
Minecraft-zu funzt
Server-an
SERVER UND CLIENT PROBLEM 12/09/2010 - Metin2 Private Server - 7 Replies Mein Problem ist Server immer
"Du wirst mit dem Server verbunden"
Und client ich packe ganze zeit die root dateien ändere in der serverinfo.yp meine ip und speicher und dann packe ich nochmal aber da sind wieder die falschen ips eingetragen
TCP Server+Client Problem 02/20/2010 - AutoIt - 9 Replies 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:
Global Const $IP = @IPAddress1
Global Const $PORT = 31758
Global $mainsocket
server/client problem D: 02/08/2010 - Dekaron Private Server - 4 Replies http://img708.imageshack.us/img708/9177/23657178.t h.jpg
any idea what might be the problem?
also when I start dekaron.exe it comes up and then just crashes...
D: any ideas?
Mannequin server DB client problem 11/25/2009 - EO PServer Hosting - 3 Replies hye all my problem after im log out and restart server my pet star gone and also royalty loss.pleass figure this for me