Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 19:47

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



TCP Server / Client problem

Discussion on TCP Server / Client problem within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
TCP Server / Client problem

Server:

Code:
_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
ouka is offline  
Old 07/13/2011, 19:37   #2
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
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.
lolkop is offline  
Thanks
1 User
Old 07/13/2011, 19:44   #3
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
Quote:
Originally Posted by lolkop View Post
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?
ouka is offline  
Old 07/13/2011, 20:13   #4
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
du könntest das ganze so gestalten, das es doppelt abgesichert wird.

(1)client ---string---> server
(2)server ---string---> client
wenn string korrekt dann
(3)client --- OK ---> server
sonst
springe zu (1)

wobei tcp das eig von sich aus machen sollte^^
lolkop is offline  
Thanks
1 User
Old 07/13/2011, 20:45   #5
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
Quote:
Originally Posted by lolkop View Post
du könntest das ganze so gestalten, das es doppelt abgesichert wird.

(1)client ---string---> server
(2)server ---string---> client
wenn string korrekt dann
(3)client --- OK ---> server
sonst
springe zu (1)

wobei tcp das eig von sich aus machen sollte^^
Typisches hand hand schacke prinzip aber wieso kommt die verbindung zu stande aber es kommt der innhalt nicht immer an? sondern nen leeres feld
ouka is offline  
Old 07/14/2011, 14:36   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
wie bereits erwähnt, sollte das tcp protokoll eigentlich dafür sorgen, das nicht verloren gehen kann.

ist auf einem der rechner eventuell eine art firewall / port-blocker eingerichtet, welche probleme verursachen könnte?
lolkop is offline  
Thanks
1 User
Old 07/14/2011, 16:46   #7
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
PHP Code:
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars'1)
Example()
Func Example()
    ; 
Set Some reusable info
    
Set your Public IP address (@IPAddress1here.
;    
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 ")"300200)
    
$edit GUICtrlCreateEdit(""1010280180)
    
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($ConnectedSocket8192)
        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($sockaddr3))
        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 isWe 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
($ConnectedSocketFileRead(@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?
ouka is offline  
Old 07/14/2011, 17:32   #8
 
V8II's Avatar
 
elite*gold: 0
Join Date: Jul 2010
Posts: 475
Received Thanks: 130
Hey,
Ich möchte kurz hinzufügen, dass ich immer das selbe Problem hatte.
Mit
PHP Code:
Do
 
$recv TCPRecv($ConnectedSocket8192)
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:
}
V8II is offline  
Thanks
1 User
Old 07/14/2011, 18:49   #9
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
Quote:
Originally Posted by V8II View Post
Hey,
Ich möchte kurz hinzufügen, dass ich immer das selbe Problem hatte.
Mit
PHP Code:
Do
 
$recv TCPRecv($ConnectedSocket8192)
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:
}
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?
ouka is offline  
Old 07/14/2011, 18:57   #10
 
V8II's Avatar
 
elite*gold: 0
Join Date: Jul 2010
Posts: 475
Received Thanks: 130
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.
V8II is offline  
Old 07/14/2011, 20:04   #11
 
ouka's Avatar
 
elite*gold: 226
Join Date: Apr 2008
Posts: 630
Received Thanks: 241
Quote:
Originally Posted by V8II View Post
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?
ouka is offline  
Reply


Similar Threads Similar Threads
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



All times are GMT +1. The time now is 19:48.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.