SkinnyWhiteGuy Posted May 19, 2007 Share Posted May 19, 2007 I'm building an application pair to automate the transfer of files from my computer at work out to multiple PCs. I have the TCPSend and Recv stuff down, but I'm getting a bit bogged down on the methodology to send. When using TCPSend with large amounts of data, it will send only pieces of the data at a time. I know how to do that as well. What I'm trying to do, however, is follow a suggestion made by Larry in his post of basic binary file transfer, which is to give each bit of the message a header that lists the size of that particular part. TCPSend doesn't return that data till AFTER it's been sent, so then a header to go BEFORE the message would be useless. I can easily split the data up manually, I'm just not sure how big to make each data "blob". As another option, I could just send the total size of the buffer as a header before even starting to send the data, have the clients send back a "ready to go" message, and then send the text, but then, how would I know when I got all the data? Trying to keep listening until the received buffer was the correct length could result in an unending loop if data was lost. I'm willing to bet there's some other method of telling when a TCPSend is done, but I can't find it now, unless it would be sending an all Null message (or just a one byte null message), or some other special sequence, but I'm worried that with that, a file might, by some very unfortunate coincidence contain that byte sequence, and mess with my program. Any help with understanding what way would work best would be greatly appreciated, because once I have this, I can put it all together quickly, and my life at work will be MUCH easier. Link to comment Share on other sites More sharing options...
nfwu Posted May 20, 2007 Share Posted May 20, 2007 (edited) if data was lostYou are assuming that data will be lost. It will not be. The TCP protocol with it's acks ensures that this would be so. How I would do this: Sample sucessful communication: (Agree on protocol version number) >>> VER 1\r\n <<< VER 1\r\n (Request file information) <<< TFR FIL\r\n (Send file infromation) >>> FIL 2068 65C3R9 1\r\n (Request 1st block) <<< TFR 1\r\n (Send first block) >>> DAT 1 2 2048 7EB621 [data]\r\n (Request 2nd block) <<< TFR 2\r\n (Send second block) >>> DAT 2 3 20 67CC0C [data]\r\n (Request 3rd block) <<< TFR 3\r\n (Send transmission complete and sucessful) >>> BYE 0\r\n >>> {Closes Socket} With a protocol documentation: >>> VER [number]\r\n Sender announces the maximum version number of the protocol he supports. <<< VER [number]\r\n Receiver announces the protocol version used for this transmission as a reply to sender's VER. <<< TFR [block id]\r\n Recver requesting sender to send block. if [block id]=="FIL", then sender must reply with a FIL >>> FIL [length] [checksum] [first block id]\r\n As a reply to recv's TFR FIL, send would send the length, checksum and the id of the first block to the recver.. >>> DAT [block id] [next block id] [length of data] [data checksum] [data]\r\n Sender sends block. <<< BYE [reason]\r\n Recver cancels transfer >>> BYE [reason]\r\n Sender cancels transfer reason = 0: [sender only] sucessful transfer / transfer complete reason = 1: [both] user cancelled transfer reason = 2: [recver only] recver is out of disk space Of course, the recver would use the checksums to check the data. Let's say block 2's checksum fails. The recver would then re-request that block with a <<< TFR 2\r\n. Let's say the entire files' checksum failed. The recver would then do a <<< TFR FIL\r\n, re-requesting the file data, repeating the process. You could use any algorithm for the checksum, CRC32, MD5, "Checksum", whatever you choose. If something does not go right, just disconnect the socket. #) Edited May 20, 2007 by nfwu TwitterOut of date stuff:Scripts: Sudoku Solver | Webserver | 3D library (Pure AutoIt) | Wood's GadgetsUDFs: _WoodUniqueID() | _DialogEditIni() | _Console*() | _GetIPConfigData() | _URLEncode/Decode() Link to comment Share on other sites More sharing options...
ptrex Posted May 20, 2007 Share Posted May 20, 2007 @all TCP is one way, this is an other way of transferring data : ; This is a simple example of managing binary files in a script using the ADODB object dim $inStream,$outStream const $adTypeText=2 const $adTypeBinary=1 $inStream=ObjCreate("ADODB.Stream") $inStream.Open $inStream.type=$adTypeBinary ; You must change this path to something on your computer! $inStream.LoadFromFile("C:\TEMP\YourFileHere.JPEG") $outStream=ObjCreate("ADODB.Stream") $outStream.Open $outStream.type=$adTypeBinary dim $buff $buff=$inStream.Read() $outStream.Write($buff) ; You must change this path to something on your computer! $outStream.SaveToFile("\\YourServer\Sharename\TEST.JPEG") $outStream.Close() $inStream.Close() Regards ptrex Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New Link to comment Share on other sites More sharing options...
Gif Posted May 20, 2007 Share Posted May 20, 2007 @all TCP is one way, this is an other way of transferring data : ; This is a simple example of managing binary files in a script using the ADODB object dim $inStream,$outStream const $adTypeText=2 const $adTypeBinary=1 $inStream=ObjCreate("ADODB.Stream") $inStream.Open $inStream.type=$adTypeBinary ; You must change this path to something on your computer! $inStream.LoadFromFile("C:\TEMP\YourFileHere.JPEG") $outStream=ObjCreate("ADODB.Stream") $outStream.Open $outStream.type=$adTypeBinary dim $buff $buff=$inStream.Read() $outStream.Write($buff) ; You must change this path to something on your computer! $outStream.SaveToFile("\\YourServer\Sharename\TEST.JPEG") $outStream.Close() $inStream.Close() Regards ptrex also you can use UDP see the help file Link to comment Share on other sites More sharing options...
SkinnyWhiteGuy Posted May 20, 2007 Author Share Posted May 20, 2007 @nfwuThanks for that lesson, I think I can emulate that quite nicely. The main reason I was worried about data loss is that Larry mentioned it might be possible when he posted his most recent Binary File transfer script, found here. I thought TCP was the protocol that guaranteed data delivery no matter what, with UDP being more "send and pray". Thanks for the header "recipe", I had a clue that it was going to look something like that, I just wasn't too sure.@ptrexThanks for that, I've seen you show it to others before as well, but I think I'll stick with my TCP implementation, I've got some other messages going over it already, so I might as well just use it again.@c4nm7Like I said above, from what I've read, UDP isn't the most reliable data transmission method, but does have it's uses (I believe it's used for multiplayer LAN games, because player positions change so fast, there's no need to acknowledge you knew where they were 2 seconds ago, you need to know where they are NOW). I'll stick with TCP. Link to comment Share on other sites More sharing options...
nfwu Posted May 21, 2007 Share Posted May 21, 2007 I was worried about data loss is that Larry mentioned it might be possible when he posted his most recent Binary File transfer script, found here.Data loss would occur if the sending or receiving application closed/terminated unexpectedly.#) TwitterOut of date stuff:Scripts: Sudoku Solver | Webserver | 3D library (Pure AutoIt) | Wood's GadgetsUDFs: _WoodUniqueID() | _DialogEditIni() | _Console*() | _GetIPConfigData() | _URLEncode/Decode() Link to comment Share on other sites More sharing options...
Fabry Posted June 22, 2007 Share Posted June 22, 2007 A Italian file transfer program: expandcollapse popup#cs ----------------------------------------------------------------------KKKKKBBP]]Ò]Ú[ÛËBP]]Ü^S[YBBTØÜ[Ý[Û FVׯFRWFôB67&Bà ¢66RÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´(¥¹±Õ±ÐíMÑÉ¥¹¹ÔÌÐì(%¹±Õ±ÐíiList.au3> #include<File.au3> #include <Process.au3> Dim �ÍÚÖÍVÎWK ÌÍÙ[LK ÌÍÙ[WÜÖÌ×K ÌÍÙ[WÔ ÌÍÙÝ Ì3c¶fÆUõEÂb33c¶FF¥D57F'GW¥TE7F'GW¢b33c¶æöÖRÒ6ö×WFW$æÖPÀÌØíͽÐôUA ¥¹¡%AÉÍÌİØÔÔÌȤ)%ÉɽȱÐìÐìÀQ¡¸á¥Ð(036;socketTCP = TCPListen(@IPAddress1, 65531) $connectedSocket = -1 IfÜ ÉÝÈ[^]ÌÍÓ^WÚÈHÝ[ÔÜ] TYÜÌK ÌÎNË33²¢b33c´'&öF67BÒb33c´×ö5³Òfײb33²âb33²fײb33c´×ölÉtµÀìÌäì¸ÌäìµÀìÀÌØí5å}¥ÁÍlÍtµÀìÌäì¸ÈÔÔÌäì(íøÕѽ%ÑMtOption('TCPTimeout', 800) $socket1 = UDPOpen($Broadcast, MLÌBYÜH[QÙ[ ÌÍÜÛØÚÙ]KTYÜÌH [È ÌÎNé 3²fײ6ö×WFW$æÖRfײb33ºBb33²fײb33c¶æöÖRfײb33ºBb33µÀì}MÑÉ¥¹¹ÉåÁРİUÍÉ9µ°ÌäíI½½±¼Ìä줵ÀìÌäîM½¹¼¹rato.¤ ') UDPCloseSocket($socket1) $x = 0 #include <GuiCoÝ[Ë]LÉÝÂÕRPÜX]J ][ÝÕÙ[Y[È[I][ÝË MMËMËLKLK&Dõ"b33cµu5ôõdU$ÄTEtäDõrÂb33cµu5ô4Ä4$Ääu2¢b33c·FW&ÖæÔuTÑɱ ÉÑ ÕÑѽ¸ ÅÕ½ÐíQɵ¥¹ÅÕ½Ðì°ÌÌÀ°ÄÀ°àÀ°ÌÀ¤)U% ÑɱMÑMÑÑ ÀÌØtermina,$GUI_DISABLE) $Input_1 = GUICtrlCreateInput("",L L BÌÍÔÙÜÜÈHÕRPÝÜX]TÙÜÜÊ LÌ B33c·W&2ÒuT7G&Ä7&VFTÆ&VÂgV÷CµW&6VçGVÆS¢gV÷C²Â33Â3ÂÂ#ÀÌØí¥½É¹ôU% Ñɱ ÉÑ ÕÑѽ¸ ÅÕ½Ðí¥½É¹ÅÕ½Ðì°äÀ°ÄÀ°àÀ°ÌÀ¤(#036;trasmetti = GUICtrlCreateButton("Invia file", 10, 10, 80, 30BÌÍÛÛZHHÕRPÝÜX]SÝ ][ÝÉ][ÝËLLLMÌ BÌÍÝ[ÒuT7G&Ä7&VFTÆ&VÂgV÷CµfVÆö6N¢gV÷C²Â33ÂSÂÂ#¢b33c·7FBÒU% Ñɱ ÉÑ1° ÅÕ½ÐíQÉÍÉ¥µ¹Ñ¼ÅÕ½Ðì°ÌÌÀ°ÄÜÀ°ÈÀÀ°ÈÀ¤(ÀÌØí1°= GUICtrlCreateLabel("Statistiche", 330, 100, 120, 20) $tempÏQÕRPÝÜX]SX[ ][ÝÕ[É][ÝËÌÌNL BÕRTÙ]Ý]J BÚÆR b33c¶×6rÒuTvWD×6r bb33c¶×6rÒFVà b33c¶FFÒTE&Ø ÀÌØíͽаÜÀÀÀ¤($%M±À ÈÀ¤(%¹%($ÀÌØí½¹¹ÑM½ÐôQ AÁ($socketTCP) If $connectedSocket > 0 Then GUICtrlSetData ÌÍÔÙÜÜË BBIÌÍÙ[HHBIÌÍØYÚ[H[Y[] BBQÕRPÝÙ]7FFRb33c·FW&ÖæÂb33c´uTôTä$ÄR uT7G&Å6WDFFb33c´Æ&VÂÂb33´F÷¹±½Ìäì¤($$ÀÌØíÍÕÍÌõQÉÕ($%]¡¥±ÀÌØí¥´±ÐìÀÌØí¥±}ÁɽlÉt($ $dataTCP = TCPRecv($connectedSocket, 30000) If @error<>[BBBSÙÐÞ M ÌÎNÑÜIÌÎNË ÌÎNÐÛY[ØÛÛÜÛÉÌÎNÊBBBBIÌc·7V66W73ÔfÇ6P WDÆö÷ VæD` fÆUw&FRb33c¶fÆSÂb33c¶FF @¤($$$ÀÌØíµÍõU%Ñ5Í ¤($$%%ÀÌØíµÍôÀÌØíU%}Y9Q} 1=M½ÈÀ6;msg = $termina Then ExitLoop $dim = BinaryLen ($dataTCPH È ÌÍÙ[BBBQÕRPÝÙ]]J ÌÍÔÙÜÜË[ ÌÍÙ[H L HÈ Ìc¶fÆU÷&õ³%Ò uT7G&Å6WDFFb33c·W&2ÂçBb33c¶FÒ¢òb33c¥±}ÁɽlÉt¤µÀìÌäìÌäì¤($$%U% ÑɱMÑÑ ÀÌØíÙ°°%¹Ð ÀÌØí¥ / 1024) / (TimerDiff($begin) / 1000)) & ' KB/s') GUICtÙ]]J ÌÍÜÝ] ÌÎNÕÙ]È[ ÌÎNÈ [È[ ÌÍÙ[KÈ L JHfײb33²´"7Rb33²fײçBb33c¶fÆU÷&õ³%Òò#Bfײb33²´"Ìäì¤($$$ÀÌØíѵÀô ÀÌØí¥±}ÁɽlÉt¼ÄÀÈФ´ ÀÌØí¥´¼ÄÀÈФ¤¼ ÀÌØím / 1024) / (TimerDiff($begin) / 1000)) GUICtrlSetData($tempo,ÌÎNÕ[È[X[[H ÌÎNÉ[Ò[ ÌÍÝ[ÌÍ I[ÉÌÎNÎÌÎNÉ[Ò[ÖöBb33c·FV×Ã3cócfײb33³¢b33²f×´çBÖöBb33c·FV×Ãc£·â$%AɽÉÍÍMС%¹Ð ÀÌØí¨ÄÀÀ¤¼ÀÌØí¥±}ÁɽlÉt¤°ÌäíQÉÍɥѼ¥°#39; & Int($a/ (1024)) & ' KB su ' & Int($filWÜÖÌKÈ L JH [È ÌÎNÈÐÌÎNË ÌÎNÕÙ[Y[È[H[ÛÜÛÉÌβ b33c¶FFD5Òb33²b33° tVæ@ fÆT6Æ÷6Rb33c¶fÆS D5 ±½ÍM½Ð ÀÌØí½¹¹ÑM½Ð¤($$ÀÌØí½¹¹ÑM½Ðô´Ä($%U% ÑɱMState($termina,$GUI_DISABLE) $a =0 If $success = TrYH[ ÌÍØHHÙÐÞ Í ÌÎNÑ[HÛÛ]]ÉÌÎNË ÌÎNÑ[HÛÛ]]6öâ7V66W76òâ6FW6FW&&&Æóòb33² bb33c¶ÒbFVâõ'VäDõ2b33²gV÷C²b33²fײb33c¶fÆUõ%eµÀìÌäì¸ÌäìµÀìÀÌØíÍеÀìÌäìÅÕ½ÐìÌäì¤($$($$($$(%¹%($(#elect Case $msg = $GUI_EVENT_CLOSE Exit Case $data &mÉÝÈ ÌÎNÉÌÎNÂBBIÌÍÜÙ[^[ÛHHÕRPÝXY ÌÍÛÛZJBBBRYÐ[Wb33c¶FFFVà b33c¶Ö72Ò&æ'Fõ7G&ærb33c¶FF VÇ6P $ÀÌØíµÍÌôÀÌØíÑ($$%¹%($$$($$$ÀÌØíÑôÌäìÌäì($$$ÀÌØíµss = StringSplit($mass, '¤') $diversi = True Fl ÌÍÚHHHÈ ÌÍÞBBBRY ÌÍÛYÜÖÌWHH ÌÍÚÖÌWVÉÌÍÚWH[b33c¶FfW'6ÒfÇ6P b33c¶5³%Õ²b33c¶ÒÒb33c¶ÖW75³%Ð lÀÌØíѵÁ¹½µôÀÌØí¥ÁÍlÍulÀÌØí¥t($$$$$ÀÌØí¥ÁÍlÍulÀÌØí¥tôÀÌØíµÃ[3] $ips[4][$i] = $mess[4] EndIf Next If �=Ù]ÚHHYH[BBBIÌÍÞH ÌÍÞ ÈBBBBIÌÍÚHHBBBBUÚ[H 3c¶fÇC³Òb33c· bb33c¶5³Õ²b33c¶ÒÒb33²b33²FVà lÀÌØí¥ÁÍlÅulÀÌØí¥tôÀÌØíµÍÍlÅtí%@($$$$$$ÀÌØí¥ÁÍlÉulÀÌØí¥tôÀÌØíess[2];Nome computer $ips[3][$i] = $mess[3];nome IÌÍÚÖÍVÉÌÍÚWHH ÌÍÛYÜÖÍNÕÙBBBBBWÑÕRPÝÝY][J ÌÍæöÖÂb33c¶5³5Õ²b33c¶Ò WDÆö÷ VæD` b33c¶Òb33m¤¬Ä($$$%]¹($$%±Í($$$$($$$$($$$%}U% Ñɱ1¥ÍÑIÁ±MÑÉ¥¹ ÀÌØí¹½µ¤°GUICtrlListSelectString($nomi, $tempnome), $mess[3]) Q[YBBRYÝ[Ò[Ý ÌÍÛYÜÖÍWK ÌÎNÈÛÛÈ[]ËÌÎNÊHHH[f÷"b33c¶ÒFòb33c· b33c·6ö6¶WCÒTE÷Vâb33c¶ÖW75³ÒÂdÔÌȤ($$$$%%ÉɽÈôÀQ¡¸UAM¹ ÀÌØíͽÐİÀÌØí¥ÁÍlÅulÀÌØí¥tmp; '¤' & $ips[2][$i] & '¤' & $lÖÌ×VÉÌÍÚWH [È ÌÎNé ÌÎNÈ [È ÌÍÚÖÍVÉÌÍÚWH [È ÌÎNé§&7b33² TE6Æ÷6U6ö6¶WBb33c·6ö6¶WC æW@ VæD` bb33mµÍÍlÙtôÌäíåÌäìQ¡¸($$$$ÀÌØíÁ½Ìô}U% Ñɱ1¥ÍÑM±ÑMÑÉ¥¹ ÀÌÛnomi, $mess[3]) _GUICtrlListDeleteItem($nomi, $pos) Ü ÌÍÚHHHÈ ÌÍÞBBBBRY ÌÍÛYÜÖÌWHH ÌÍÚÖÌWVÉÌÍÚWHà b33c¶5³Õ²b33c¶ÒÒb33²b33° b33c¶5³%Õ²b33c¶ÒÒbNË ÌÎNÐÛY[ØÛÛÜÛÉÌÎNÊBBBBBQ^]ÛÜBBBBQ[YBBBBIÌÍÛÙÏQÕTvWD×6r bb33c¶×6rÒb33c´uTôUdTåEô4Äõ4R÷"b33c¶×6rÒb33c·FW%¥¹Q¡¸á¥Ñ1½½À($$$$$ÀÌØí¥´ôÀÌØí¥´¬¥¹É屸 ÀÌØí¥±}Ѥ¤) GUICtrlSetData($Progress, Int(($dim * 100) / $file_pro[7JJBBBBBQÕRPÝÙ]]J ÌÍÜË[ ÌÍÙ[H L HÈ ÌÍÙ[WÜÖÅÒfײb33²Rb33² uT7G&Å6WDFFb33c·fVÂÂçBb33c¶FÒò#B¼¡Q¥µÉ¥ ÀÌØí¥¸¤¼ÄÀÀÀ¤¤µÀìÌäì-½ÌÌäì¤($$$$$ÀÌØíѵÀô¨$file_pro[2]/ 1024)-($dim/1024))/(($dim / 1024) / (TimerDifj ÌÍØYÚ[HÈL JBBBQÕRPÝÙ]]J ÌÍÝ[Ë ÌÎNÕ[È[X[[H33²f×´çBb33c·FV×ó3cfײb33³¢b33²f×´çBÖöBb33c·FV×Ã3cøÀ¤µÀìÌäìèÌäìµÀí%¹Ð¡5½ ÀÌØíѵÀ°ØÀ¤¤¤($$$$%U% ÑɱMÑÑ ÀÌØíÄat, 'Trasferito il ' & Int($dim/ (1024)) & ' KB sx ÌÎNÈ [È[ ÌÍÙ[WÜÖÌKÈ L JH [È ÌÎNÈÐÌÎNÊBBBBUÑ[uT7G&Å6WE7FFRb33c·FW&ÖæÂb33c´uTôD4$ÄR fÆT6Æ÷6Rb33c¶fÄĤ($$$%Q A ±½ÍM½Ð ÀÌØíͽÐĤ($$$$($$%¹%($$%}U% Ñɱ1¥ÍÑM±ÑMÑÉng($nomi, $selezione) Case $msg = $trasmetti >ÚHHBBUÚ[H ÌÍÚH ÏH ÌÍÞBBBIÌÍÚHH ÌÍÚH ÈBBBBRYÕRP×&Å&VBb33c¶æöÖÒb33c¶5³5Õ²b33c¶ÒFVâWDÆö÷ tVæ@ buT1ɱI ÀÌØí¹½µ¤¤±ÐìÐìÌäìÌäì¹U% ÑɱI ÀÌØí¹½µ¤¤±ÐìÐà$nome Then $file_TX = FileOpenDialog('Scegli File dh[XIÌÎNËÛÜÚ[Ñ [È ÌÎNÉÌLÉÌÎNË ÌÎNÔ]X[ÚXÚH IÌÎBÂ2 bb33c¶fÆUõEfÇC²fwC²b33²b33²FVà b33c¶æöÖfÆRMÑÉ¥¹MÁ±¥Ð ÀÌØí¥±}Q`°ÌäìÀäÈìÌäì¤($$$$$ÀÌØíͽÐÄôUA=Á¸¦#036;ips[1][$i], 65532) UDPSend($socket1, @IPAddress1 &)ÌÎNé ÌÎNÈ [ÈÛÛ][YH [È ÌÎNé ÌÎNÈ [È ÌÍÛÛYH [È ÃºBb33²fײõ7G&ætVæ7'BÂW6W$æÖRÂb33µ&öFöÆfòb33²fײb33ºHÌäìµÀìÀÌØí¹½µ¥±lÀÌØí¹½µ¥±lÁutµÀìÌäïàÌäìµÀ쥱ÑM¥é ÀÌØí¥±}Q`¤µÀìÌäÌäì¤($$$$%UA ±½Íocket($socket1) Else MsgBox(48 + 8192, 'Attenzione', ÌÎNÑ[H[ÚÝ[IÌÎNÊBBBBQ[YBBQ[ÙBBBBSÙÐÞ NL ÌÎNÔÙ[^væWFVçFRb33²Âb33´FWf&Ö6VÆW¦öæ&RÂb33²b33·WFVçFRW"çf&Rx¥±¸I¥½É¡¹½¸ÁÕ½¤Í±é¥½¹ÉÑÍÑÍͼ¸Ìäì¤($$$$($$%¹%($$%leep(100) Case $msg = $aggiorna For $i = 1 To $BBBIÌÍÜÛØÚÙ]HHQÜ[ ÌÍÐØYØÝ MLÌBBBBRYÜHbTE6VæBb33c·6ö6¶WCÂb33c¶5³Õ²b33c¶Òfײb33ºBb33²fײb33m¥ÁÍlÉulÀÌØí¥tµÀìÌäîÌäìµÀìÀÌØí¥ÁÍlÍulÀÌØí¥tµÀìÌäî£39; & $ips[4][$i] & '¤ .¤risp') UDPCloseSock] ÌÍÜÛØÚÙ]JBBBS^BBIÌÍÜÛØÚÙ]HHQÜ[ ÌÍÐØYØÝ MLÌ`bW'&÷"ÒFVâTE6VæBb33c·6ö6¶WCÂFG&W73fײb33ºBb33²µÀì ½µÁÕÑÉ9µµÀìÌäîÌäìµÀìÀÌØí¹½µµÀìÌäîÌäì°; _StringEncrypt(1, @UserName, 'Rodolfo') & '¤ Mi sto æggi[Ë©YÙÉÌÎNÊBBBUQÛÜÙTÛØÚÙ] ÌÍÜÛØÚÙ]JBQ[Ù[XÝÑ[[ÈÛWFôDWB b33c·6ö6¶WCÒTE÷Vâb33c´'&öF67BÂcSS3" bW'&÷"ÒQ¡¸UAM¹ ÀÌØíͽÐİ%AÉÍÌĵÀìÌäîÌäìµÀì ½µÁÕÑÉ9e & '¤' & $nome & '¤' & _StringEncrypJKÙ[YK ÌÎNÔÙÛÉÌÎNÊH [È ÌÎNéÚX[ÈH~HK©YIÌÎNÊBTE6Æ÷6U6ö6¶WBb33c·6ö6¶WC f÷"b33c¶ÒFòb33c· b33c·6ö6¶WCÁUA=Á¸ ÀÌØí¥ÁÍlÅulÀÌØí¥t°ØÔÔÌȤ($%%ÉɽÈôÀQ¡¸UAM¹ ÀÌØíÍ£ket1, @IPAddress1 & '¤' & @ComputerName & '¤' [È ÌÍÛÛYH [È ÌÎNé ÌÎNÈ [ÈÔÝ[Ñ[Ü KÙ[YK ÌÎNÔ¶FöÆfòb33²fײb33ºB6òF&FêF'Rb33² TE6Æ÷6U6ö6¶WBb33mͽÐĤ(%9áÐ((%Q A ±½ÍM½Ð ÀÌØíͽÑQ @¤(%UA ±½ÍM½Ð ÀÌØíͽ¥t) UDPShutdown() TCPShutdown() EndFunc ;==>OnAutoItExit Compatible with my lan chat A lan chat (Multilanguage)LanMuleFile transferTank gameTank 2 an online game[center]L'esperienza è il nome che tutti danno ai propri errori.Experience is the name everyone gives to their mistakes.Oscar Wilde[/center] 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