Hallo zusammen,
ich weiß zwar, dass dieses Thema schon oft durchgekaut wurde, doch ich habe ein Problem mit einer TCP Verbindung. Mein Programm soll ein kleiner Netzwerkmessenger werden, der über TCP Daten zu einem bestimmten Ziel sendet. Diese Daten werden dann als TrayTip angezeigt. Soweit so gut. In der Praxis funktionierts lokal, doch wenn man es auf 2 verschiedenen Rechner probiert, dann kriegt der Client keine Verbindung zum Server aufgebaut. Mir wird nur ein WSA 10060 Error angezeigt. Um sicher zu gehen, hab ich mal versucht meine Firewall auszuschalten, doch es funktiobiert trozdem nicht. Hat jemand einen Rat?
Hier sind meine Quelltexte:
Server
Spoiler anzeigen
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]TraySetToolTip("Intranet Messenger")
[/autoit] [autoit][/autoit] [autoit]Opt('MustDeclareVars', 1)
Opt("TrayMenuMode", 1)
Opt("TrayMenuMode", 1)
Opt("TrayMenuMode", 1)
Global $szIPADDRESS = "127.0.0.1"
Global $nPORT = 33891
Global $MainSocket, $ConnectedSocket, $szIP_Accepted, $recv
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
[/autoit] [autoit][/autoit] [autoit]; If the Socket creation fails, exit.
If $MainSocket = -1 Then Exit
$ConnectedSocket = -1
[/autoit] [autoit][/autoit] [autoit]Main()
[/autoit] [autoit][/autoit] [autoit]Func Main()
[/autoit] [autoit][/autoit] [autoit]Do
$ConnectedSocket = TCPAccept($MainSocket)
Sleep(300)
Until $ConnectedSocket <> -1
$szIP_Accepted = SocketToIP($ConnectedSocket)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]$recv = TCPRecv($ConnectedSocket, 2048)
[/autoit] [autoit][/autoit] [autoit]If @error Then ExitLoop
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If $recv <> "" Then TrayTip($szIP_Accepted, $recv, 10)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]If $ConnectedSocket <> -1 Then Main()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
[/autoit] [autoit][/autoit] [autoit]$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
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc
Client
Spoiler anzeigen
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]Global $ConnectedSocket, $szData
[/autoit] [autoit][/autoit] [autoit]Global $szIPADDRESS = "127.0.0.1"
Global $nPORT = 33891
$ConnectedSocket = -1
[/autoit] [autoit][/autoit] [autoit]$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
[/autoit] [autoit][/autoit] [autoit]If @error Then
MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
Else
$szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")
If $szData <> "" Then TCPSend($ConnectedSocket, $szData)
[/autoit] [autoit][/autoit] [autoit]If @error Or $szData = "" Then Exit
EndIf