CodyBarrett Posted January 20, 2009 Share Posted January 20, 2009 im having trouble using an array with multiple clients in it, and then sending to those clients, i have a normal TCP but i kinda need multiclient badly I HAVE SEARCHED!!!!! but everytime find something i see very confusing stuff, is it possible to just have an array and when a client connects it adds a string to a variable in the array? and then call upon that variable for sending\recving\banning? i could use some help [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] Link to comment Share on other sites More sharing options...
BrettF Posted January 20, 2009 Share Posted January 20, 2009 Take a look at Kip's UDF. It makes it easy Cheers, Brett Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
CodyBarrett Posted January 22, 2009 Author Share Posted January 22, 2009 i Took a look... didnt make sense to me but i made this code from a few other peoples, when i run SERVER its fine, the when i run client the server notifies you of the clients connection, i have tested this for 3 clients and it all returns connected BUT!!! i cannot send to any clients\or the server whats wrong with my TCPSend() or TCPRecv()?? SERVER: expandcollapse popupHotKeySet('{ENTER}','_Send') $GUI = GUICreate("Utilitarian", 550, 400, -1, -1, 1, 136) Global $Current_Socket = 0 Global $Connected_Socket[50] Global $TCP_Server $IP = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'IP', '') $Port = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Port', '') $Name = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Name', '') $Status = 'Online' $Ic = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Background_Color', '') $IF = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-N', '') $IS = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-S', '') $IcC = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-C', '') $TCP = TCPStartup() If $TCP = 0 Then MsgBox(0,'Error','Unable To Start TCP Services.') Exit EndIf $TCP_Server = TCPListen($IP,$Port,50) If $TCP_Server = -1 Then MsgBox(0,'Error','Unable To Start Listening On Open Socket') Exit EndIf $L2 = GUICtrlCreateInput('TCP-NOT FINISHED: ' & 'Name = ' & $Name & ' : IP = ' & $IP & ' : Port = ' & $Port & ' Status = ' & $Status, 10, 30, 420, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY)) $Main = GUICtrlCreateEdit('', 10, 50, 520, 230, 2103360) $Send = GUICtrlCreateEdit('NOT FINISHED', 10, 290, 520, 60, 2101248) $Users = GUICtrlCreateCombo($Name & ' - ' & 'Server',430,30,100,20) GUICtrlSetData($Main, 'Starting... ') GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'Port : ' & $Port) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'IP : ' & $IP) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'Name : ' & $Name) GUICtrlSetBkColor($Main, $Ic) GUICtrlSetBkColor($Send, $Ic) GUICtrlSetColor($Main, $IcC) GUICtrlSetColor($Send, $IcC) GUICtrlSetFont($Main, $IS, '', '', $IF) GUICtrlSetFont($Send, $IS, '', '', $IF) While 1 $Connected_Socket[$Current_Socket] = TCPAccept($TCP_Server) If $Connected_Socket[$Current_Socket] <> -1 Then $Current_Socket += 1 EndIf For $Index = 0 to 49 $Recv = TCPRecv($Connected_Socket[$Index],1000000) If StringInStr($Recv,'***NAME***') = 1 Then $a = StringTrimLeft($Recv,10) GUICtrlSetData($Users,GUICtrlRead($Users) & @CRLF & GUICtrlRead($a)) EndIf If StringInStr($Recv,'***Server NAME****') = 1 Then TCPSend($Connected_Socket[$Index],$Name) If StringInStr($Recv,'***MSG***') = 1 Then MsgBox(0,'',GUICtrlRead($Recv)) $a = StringTrimLeft($Recv,9) TCPSend($Connected_Socket[$Index],GUICtrlRead($a)) GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & GUICtrlRead($a)) EndIf Next Sleep(20) If $TCP_Server = -1 Then $Status = 'Offline' GUICtrlSetData($L2, 'TCP-Server: ' & 'Name = ' & $Name & ' : IP = ' & $IP & ' : Port = ' & $Port & 'Status = ' & $Status) EndIf WEnd Func _send() If $Send <> '' Then For $Index = 0 To 49 If GUICtrlRead($Send) <> '' Then TCPSend($Connected_Socket[$Current_Socket], '***MSG***' & GUICtrlRead($Send)) EndIf Next GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Name & ' ^ ' & GUICtrlRead($Send)) GUICtrlSetData($Send, '') GUICtrlSetState($Send, $GUI_FOCUS) EndIf EndFunc ;==>_send OK yeah this is CUT out of my original Script because its the only part that is having difficulties, if you want the WHOLE script ill post it but its 600lines long and irrelevent CLIENT: expandcollapse popupHotKeySet('{ENTER}','_Send') $GUI = GUICreate("Utilitarian", 550, 400, -1, -1, 1, 136) $IP = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'IP', '') $Port = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Port', '') $Name = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Name', '') $Status = 'Online' $Ic = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Background_Color', '') $IF = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-N', '') $IS = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-S', '') $IcC = IniRead(@ScriptDir & '\1597532846.ini', 'TCP', 'Font-C', '') $TCP = TCPStartup() If $TCP = 0 Then MsgBox(0,'Error','Unable To Start TCP Services.') Exit EndIf $TCP_Client = TCPConnect($IP,$Port) If $TCP_Client = -1 Then MsgBox(0,'Error','Unable To Connect On Port ' & $Port & ' And Ip ' & $IP) EndIf $L2 = GUICtrlCreateInput('TCP-NOT FINISHED: ' & 'Name = ' & $Name & ' : IP = ' & $IP & ' : Port = ' & $Port & ' Status = ' & $Status, 10, 30, 420, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY)) $Main = GUICtrlCreateEdit('', 10, 50, 520, 230, 2103360) $Send = GUICtrlCreateEdit('NOT FINISHED', 10, 290, 520, 60, 2101248) $Users = GUICtrlCreateCombo($Name & ' - ' & 'Server',430,30,100,20) GUICtrlSetData($Main, 'Starting... ') GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'Port : ' & $Port) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'IP : ' & $IP) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & 'Name : ' & $Name) GUICtrlSetBkColor($Main, $Ic) GUICtrlSetBkColor($Send, $Ic) GUICtrlSetColor($Main, $IcC) GUICtrlSetColor($Send, $IcC) GUICtrlSetFont($Main, $IS, '', '', $IF) GUICtrlSetFont($Send, $IS, '', '', $IF) While 1 $Recv = TCPRecv($TCP_Client,1000000) If $TCP_Client <> -1 Then If $Recv = '***MSG***' Then $a = StringTrimLeft($Recv,9) GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & Guictrlread($a)) EndIf EndIf If GUICtrlRead($Recv) = '***RUN***' Then $a = StringTrimLeft($Recv,9) Run(GUICtrlRead($a)) EndIf If $TCP_Client = -1 Then $Status = 'Offline' GUICtrlSetData($L2, 'TCP-Server: ' & 'Name = ' & $Name & ' : IP = ' & $IP & ' : Port = ' & $Port & 'Status = ' & $Status) EndIf WEnd Func _send() If GUICtrlRead($Send) <> '' Then TCPSend($TCP_Client, '***MSG***' &'You' & ' => ' & GUICtrlRead($Send)) EndIf GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Name & ' ^ ' & GUICtrlRead($Send)) GUICtrlSetData($Send, '') GUICtrlSetState($Send, $GUI_FOCUS) EndFunc ;==>_send and yeah THEY CONNECT but they CANT SEND\RECV whats wrong? [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] Link to comment Share on other sites More sharing options...
CodyBarrett Posted January 23, 2009 Author Share Posted January 23, 2009 hmmmmmmmmmm LEGAL BUMP!!!!!!!! sorry guys but UDFs just confuse the sh** out of me and john2006's tcp chat works fine i just dont understand how to do it myself and thats what im asking for TEACH ME PLEASE!!! D': [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] Link to comment Share on other sites More sharing options...
BrettF Posted January 23, 2009 Share Posted January 23, 2009 I suggest you use the UDF (which is here: http://www.autoitscript.com/forum/index.php?showtopic=74325)There are plenty of examples for what you need. Have a go with them, and see post what you come up with TCP is quite hard already, and it becomes 100 times harder when you want multiple clients. So the UDF is the best way to go Cheers,Brett Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
Xand3r Posted January 23, 2009 Share Posted January 23, 2009 (edited) I suggest you use the UDF (which is here: http://www.autoitscript.com/forum/index.php?showtopic=74325) There are plenty of examples for what you need. Have a go with them, and see post what you come up with TCP is quite hard already, and it becomes 100 times harder when you want multiple clients. So the UDF is the best way to go Cheers, Brett it's not really that hard you just have to take some time to find out how it works(google or forum or w/e) and experiment with it @bob: for a multi client tcp server you use an array that holds each client's socket and/or some data about that client so.. expandcollapse popupTCPStartup() Global $L_socket=TCPListen(@IPAddress1,10101) Dim $clients[100][20] _wipe() While 1 $old_count=$clients[0][0] _new_client() If $clients[0][0]<>$old_count Then _broadcast("new client!") WEnd Func _new_client() Local $_new_client=TCPAccept($L_socket) If $_new_client=-1 Then Return For $i=1 To 99 If $clients[$i][0]=0 Then $clients[$i][0]=$_new_client $clients[$i][1]="some data";anything you want ;$clients[$i][2]="some other data";... same here $clients[0][0]+=1 Return EndIf Next EndFunc Func _wipe() For $i=0 To 99 If $clients[$i][0]<>0 Then _kill($clients[$i][0]) For $j=0 To 19 $clients[$i][$j]=0 Next Next EndFunc Func _kill($_socket) For $i=1 To 99 If $clients[$i][0]=$_socket Then For $j=0 To 19 $clients[$i][$j]=0 Next $clients[0][0]-=1 Return TCPCloseSocket($_socket) EndIf Next Return SetError(1);that socket was not in the client list.. EndFunc Func _unicast($_socket,$data) If $data="" Then Return $_send=TCPSend($_socket,$data) If @error Then _kill($_socket) Return $_send EndFunc Func _broadcast($data) For $i=1 To 99 If $clients[$i][0]<>0 Then TCPSend($clients[$i][0],$data) If @error Then _kill($clients[$i][0]) EndIf Next EndFunc Func _recv() For $i=1 To 99 $recv=TCPRecv($clients[$i][0],10000) If $recv Then ;this is where you get data from your clients ConsoleWrite("got :"&$recv&" from : ("&$i&")"& $clients[$i][0] & @CRLF) ;for a simple chat you could use _broadcast($recv) here :) EndIf Next EndFunc let me know if you need some help with it Edited January 23, 2009 by TheMadman Only two things are infinite, the universe and human stupidity, and i'm not sure about the former -Alber EinsteinPractice makes perfect! but nobody's perfect so why practice at all?http://forum.ambrozie.ro Link to comment Share on other sites More sharing options...
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