Sercankd Posted November 3, 2010 Posted November 3, 2010 i m trying to make some simple VNC like server and client but there is a problem, i want to list connected ip addresses on my Listview gui item, but it shows only server ip,tried over 3 computers when they are all connected to my server there is just my own server IP address i can see.i want to show every single one ip connected to server here my code expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <GuiStatusBar.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> Global $List1 Global $recv Global $ipclient Global $BagliSoket ;##################################################### $ipserver = @IPAddress1 $port = 33891 TCPStartup() $AnaSoket = TCPListen($ipserver, $port) If $AnaSoket = -1 Then MsgBox(0, "", "Soket Hatası") $BagliSoket = -1 $BagliSoket = TCPConnect($ipserver, $port) $ipclient = _SocketGetIP($BagliSoket) Do $BagliSoket = TCPAccept($AnaSoket) Until $BagliSoket <> -1 $recv = TCPRecv($BagliSoket, 2048) If $BagliSoket <> -1 Then TCPCloseSocket($BagliSoket) ;##################################################### #Region ### START Koda GUI section ### Form=c:\users\sercan\documents\server.kxf $Form1_1 = GUICreate("Form1", 630, 423, 192, 145) $StatusBar1 = _GUICtrlStatusBar_Create($Form1_1) _GUICtrlStatusBar_SetMinHeight($StatusBar1, 25) $List1 = GUICtrlCreateListView("Makinalar", 4, 24, 169, 344) $ilgilen = GUICtrlCreateButton("Bağlan", 4, 368, 170, 25, $WS_GROUP) $Label1 = GUICtrlCreateLabel("Açık ve Bağlı Bilgisayarlar", 28, 7, 124, 17) $Tab1 = GUICtrlCreateTab(177, 8, 450, 385) GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT) $Programlar = GUICtrlCreateTabItem("Programlar") GUICtrlSetState(-1, $GUI_SHOW) $list = ProcessList() $List2 = GUICtrlCreateList("", 184, 40, 433, 318) For $i = 1 To $list[0][0] GUICtrlSetData($List2, $list[$i][0]) Next $Kapat = GUICtrlCreateButton("Kapat", 184, 360, 217, 25, $WS_GROUP) $Calistir = GUICtrlCreateButton("Yenile", 400, 360, 217, 25, $WS_GROUP) $Sistem = GUICtrlCreateTabItem("Sistem") $Label2 = GUICtrlCreateLabel("Makina", 184, 32, 39, 17) $Makina = GUICtrlCreateInput(@UserName, 184, 48, 433, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY)) $Label3 = GUICtrlCreateLabel("İşletim Sistemi", 184, 72, 69, 17) $OS = GUICtrlCreateInput(@OSVersion & @CPUArch, 184, 88, 433, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY)) $Label4 = GUICtrlCreateLabel("IP Adresi", 184, 112, 46, 17) $ipadresi = GUICtrlCreateInput(@IPAddress1, 184, 128, 433, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY)) GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Kapat $sercan = GUICtrlRead($List2) ProcessClose($sercan) Case $Calistir $list23 = ProcessList() For $i = 1 To $list23[0][0] GUICtrlSetData($List2, $list23[$i][0]) Next Case $ilgilen GUICtrlCreateListViewItem($ipclient, $List1) EndSwitch WEnd TCPShutdown() ; Function to return IP Address from a connected socket. ;---------------------------------------------------------------------- Func _SocketGetIP($Data) Local $Struct, $Return $Struct = DllStructCreate('short;ushort;uint;char[8]') $Return = DllCall('Ws2_32.dll', 'int', 'getpeername', 'int', $Data, 'ptr', DllStructGetPtr($Struct), 'int*', DllStructGetSize($Struct)) If @error Or $Return[0] <> 0 Then Return 0 $Return = DllCall('Ws2_32.dll', 'str', 'inet_ntoa', 'int', DllStructGetData($Struct, 3)) If @error Then Return 0 $Struct = 0 Return $Return[0] EndFunc ;==>_SocketGetIP
CodyBarrett Posted November 3, 2010 Posted November 3, 2010 (edited) something like this? just store the IP's in an array?expandcollapse popuptcpstartup () $mainsocket = tcplisten (@IPAddress1,4444) Dim $socketlist[100][2] For $n = 0 To UBound ($socketlist)-1 $socketlist[$n][0] = 0 Next while 1 _IncommingConnection () wend For $n = 0 to ubound ($socketlist)-1 TCPClosesocket($socketlist[$n][0]) next tcpclosesocket ($mainsocket) TCPshutdown () exit func _IncommingConnection () local $n, $socket = tcpaccept ($mainsocket) If $socket = -1 then return If SocketToIP ($socket) = TCPNameToIP ('Google.ca') Then Return ;Line Of Interest!!! For $n = 0 To UBound ($socketlist)-1 If $socketlist[$n][0] = 0 Then $socketlist[$n][0] = $socket $socketlist[$n][1] = SocketToIP ($socket) endif Next EndFunc Func SocketToIP($SHOCKET) 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 Edited November 3, 2010 by CodyBarrett [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
Sercankd Posted November 3, 2010 Author Posted November 3, 2010 (edited) im unable to convert your code into mine, can you help a little? its my first time with tcp functions Edited November 3, 2010 by Sercankd
Sercankd Posted November 5, 2010 Author Posted November 5, 2010 (edited) your _IncommingConnection function returns 0 Edited November 5, 2010 by Sercankd
CodyBarrett Posted November 5, 2010 Posted November 5, 2010 try this. its a bit better.expandcollapse popupHotkeyset ('#x','End') ;Sets a hotkey to close the script. tcpstartup () ;Starts TCP services (only need to call this once). $mainsocket = tcplisten (@IPAddress1,4444) ;This creates a listening ear (socket) for incomming connections. Dim $socketlist[100] ;creates an array to capture the connected sockets, 0-99 including 0 it would be 100 possible elements. For $n = 0 To UBound ($socketlist)-1 ;For beggining To End Of Array. $socketlist[$n] = 0 ;Sets The Elements To 0. Next while 1 _IncommingConnection () ;alternately you could use ADLIBREGISTER ('_IncommingConnection') which might actually be better but for now this is good enough. wend func _IncommingConnection () local $n, $socket = tcpaccept ($mainsocket) ;tcpaccept accepts a pending connection. (Called From TCPCONNECT()) If $socket = -1 then return ;If error (no pending connections, then return). ;------------------LINE OF INTEREST--------------------------------- If SocketToIP ($socket) = TCPNameToIP ('Google.ca') Then ;Use this line for whatever IP you want to block. TCPCloseSocket ($socket) ;Closes the established Socket because you blocked its IP. Return EndIf ;------------------------------------------------------------------- For $n = 0 To UBound ($socketlist)-1 If $socketlist[$n] = 0 Then ;searching for an empty elemtent in the array. $socketlist[$n] = $socket ;once the first empty element is found then use it. Return endif Next TCPCloseSocket ($socket) ;This is called if there is no open elements. EndFunc Func SocketToIP($SHOCKET) ;im not entirely sure what this function does but it returns an IP or 0. 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 Func End () For $n = 0 to ubound ($socketlist)-1 If $socketlist[$n] = 0 Then TCPClosesocket($socketlist[$n]) ;Closes EVERY Socket that is still connected. EndIf next tcpclosesocket ($mainsocket) ;CLoses the Listening EAR. TCPshutdown () ;shuts down the TCP services. EndFunc [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
CodyBarrett Posted November 5, 2010 Posted November 5, 2010 what have you used to connect to them? what is your client code? [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
Sercankd Posted November 6, 2010 Author Posted November 6, 2010 (edited) client expandcollapse popupOpt('MustDeclareVars', 1) ;============================================== ;============================================== ;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!! ;============================================== ;============================================== 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 = "192.168.2.16" Local $nPORT = 33891 ; Start The TCP Services ;============================================== TCPStartup() ; Initialize a variable to represent a connection ;============================================== $ConnectedSocket = -1 ;Attempt to connect to SERVER at its IP and PORT 33891 ;======================================================= $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT) ; If there is an error... show it 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 ;Loop forever asking for data to send to the SERVER While 1 ; InputBox for data to transmit ; If they cancel the InputBox or leave it blank we exit our forever loop $szData = "Sercan" If @error Or $szData = "" Then ExitLoop ; We should have data in $szData... lets attempt to send it through our connected socket. TCPSend($ConnectedSocket, $szData) ; If the send failed with @error then the socket has disconnected ;---------------------------------------------------------------- If @error Then ExitLoop WEnd EndIf EndFunc ;==>Example server Edited November 6, 2010 by Sercankd
CodyBarrett Posted November 8, 2010 Posted November 8, 2010 (edited) these worked fine for me. i only changed a few lines, a console write in the INCOMING CONNECTION func, and you IP and PORT numbers. you had the client connecting to something that isn't there.expandcollapse popupOpt('MustDeclareVars', 1) ;============================================== ;============================================== ;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!! ;============================================== ;============================================== 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 = "192.168.2.16" Local $szIPADDRESS = @IPAddress1 Local $nPORT = 4444 ;~ Local $nPORT = 33891 ; Start The TCP Services ;============================================== TCPStartup() ; Initialize a variable to represent a connection ;============================================== $ConnectedSocket = -1 ;Attempt to connect to SERVER at its IP and PORT 33891 ;======================================================= $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT) ; If there is an error... show it 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 ;Loop forever asking for data to send to the SERVER While 1 ; InputBox for data to transmit ; If they cancel the InputBox or leave it blank we exit our forever loop $szData = "Sercan" If @error Or $szData = "" Then ExitLoop ; We should have data in $szData... lets attempt to send it through our connected socket. TCPSend($ConnectedSocket, $szData) ; If the send failed with @error then the socket has disconnected ;---------------------------------------------------------------- If @error Then ExitLoop WEnd EndIf EndFunc ;==>Exampleexpandcollapse popupHotkeyset ('#x','End') ;Sets a hotkey to close the script. tcpstartup () ;Starts TCP services (only need to call this once). $mainsocket = tcplisten (@IPAddress1,4444) ;This creates a listening ear (socket) for incomming connections. Dim $socketlist[100] ;creates an array to capture the connected sockets, 0-99 including 0 it would be 100 possible elements. For $n = 0 To UBound ($socketlist)-1 ;For beggining To End Of Array. $socketlist[$n] = 0 ;Sets The Elements To 0. Next while 1 _IncommingConnection () ;alternately you could use ADLIBREGISTER ('_IncommingConnection') which might actually be better but for now this is good enough. wend func _IncommingConnection () local $n, $socket = tcpaccept ($mainsocket) ;tcpaccept accepts a pending connection. (Called From TCPCONNECT()) If $socket = -1 then return ;If error (no pending connections, then return). ;------------------LINE OF INTEREST--------------------------------- If SocketToIP ($socket) = TCPNameToIP ('Google.ca') Then ;Use this line for whatever IP you want to block. TCPCloseSocket ($socket) ;Closes the established Socket because you blocked its IP. Return EndIf ;------------------------------------------------------------------- For $n = 0 To UBound ($socketlist)-1 If $socketlist[$n] = 0 Then ;searching for an empty elemtent in the array. $socketlist[$n] = $socket ;once the first empty element is found then use it. ConsoleWrite ('NEW CLIENT:' & $socket & @TAB & 'IP:' & SocketToIP ($socket) & @CR) Return endif Next TCPCloseSocket ($socket) ;This is called if there is no open elements. EndFunc Func SocketToIP($SHOCKET) ;im not entirely sure what this function does but it returns an IP or 0. 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 Func End () For $n = 0 to ubound ($socketlist)-1 If $socketlist[$n] = 0 Then TCPClosesocket($socketlist[$n]) ;Closes EVERY Socket that is still connected. EndIf next tcpclosesocket ($mainsocket) ;CLoses the Listening EAR. TCPshutdown () ;shuts down the TCP services. EndFunc Edited November 8, 2010 by CodyBarrett [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now