KurogamineNox Posted February 1, 2011 Posted February 1, 2011 (edited) *Please Do not forget to read updated information at bottom of edited post and or edited Autoit code, thank you* Hi everyone, I was working on a Server and Client program, not in the most complex way but only for simple Server and Client related automation. I already started working on it but I am now stuck while looking at the TCPRecv in the AutoIt Help file. I think I need to still modify my current coding in both the Server and Client Programs. Could you guys give me a little hand here or steer me into the right direction? Updated/Current Server Code: expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt('MustDeclareVars', 1) HotKeySet("{F10}", "Leave") ; Set HotKey Func Leave() Exit EndFunc ;============================================== ;============================================== ;SERVER!! Start Me First !!!!!!!!!!!!!!! ;============================================== ;============================================== Example() Func Example() ; Set Some reusable info ; Set your Public IP address (@IPAddress1) here. ; Local $szServerPC = @ComputerName ; Local $szIPADDRESS = TCPNameToIP($szServerPC) Local $szIPADDRESS = @IPAddress1 Local $nPORT = 80 Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted Local $msg, $recv, $Button1, $Button2 ; 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 ;============================================== #Region ### START Koda GUI section ### Form= $GOOEY = GUICreate("Server", 625, 445, 192, 124) $edit = GUICtrlCreateEdit("", 8, 8, 601, 385, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL)) $Button1 = GUICtrlCreateButton("Start Server", 8, 400, 121, 33, $WS_GROUP) $Button2 = GUICtrlCreateButton("Close Server", 487, 400, 121, 33, $WS_GROUP) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### ; Initialize a variable to represent a connection ;============================================== $ConnectedSocket = -1 ;Wait for and Accept a connection ;============================================== Do $ConnectedSocket = TCPAccept($MainSocket) Until $ConnectedSocket <> -1 ; Get IP of client connecting $szIP_Accepted = SocketToIP($ConnectedSocket) ; GUI Message Loop ;============================================== While 1 $msg = GUIGetMsg() ; GUI Closed ;-------------------- If $msg = $GUI_EVENT_CLOSE Then ExitLoop ; Try to receive (up to) 2048 bytes ;---------------------------------------------------------------- $recv = TCPRecv($ConnectedSocket, 2048) ; If the receive failed with @error then the socket has disconnected ;---------------------------------------------------------------- If @error Then ExitLoop ; Update the edit control with what we have received ;---------------------------------------------------------------- If $recv <> "" Then GUICtrlSetData($edit, _ $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit)) Select Case $recv = "/notepad" ShellExecute("notepad") EndSelect WEnd If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket) TCPShutdown() EndFunc ;==>Example ; Function to return IP Address from a connected socket. ;---------------------------------------------------------------------- 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 ;==>SocketToIP Updated/Current Client Code: expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Client", 401, 301, 258, 126) $Button1 = GUICtrlCreateButton("Connect", 8, 256, 89, 33, $WS_GROUP) $Button2 = GUICtrlCreateButton("Disconnect", 282, 256, 89, 33, $WS_GROUP) $Input1 = GUICtrlCreateInput("Text", 8, 216, 377, 21) $Edit1 = GUICtrlCreateEdit("", 8, 32, 377, 177, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_GROUP,$WS_VSCROLL)) GUICtrlSetData(-1, "Edit1") $Button3 = GUICtrlCreateButton("Send", 146, 258, 89, 33, $WS_GROUP) $Input2 = GUICtrlCreateInput("Ip Address to Connect to", 232, 8, 153, 21) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $g_IP = "ip address of host/server" $szData = "" While 1 $nMsg = GUIGetMsg() Select Case $nMsg = $GUI_EVENT_CLOSE Exit Case $nMsg = $Button1 GUICtrlSetData($Edit1, @CRLF&"Starting TCP Services", 1) ; Start The TCP Services ;============================================== TCPStartUp() sleep(2000) $socket = TCPConnect( $g_IP, 80 ) GUICtrlSetData($Edit1, @CRLF&"Connected", 1) TCPSend($Socket, "Client: Connected") Case $nMsg = $Button2 GUICtrlSetData($Edit1, @CRLF&"Shutting Client Down", 1) TCPCloseSocket($Socket) sleep(2000) TCPShutdown() GUICtrlSetData($Edit1, @CRLF&"TCP Shut Down", 1) sleep(2000) Case $nMsg = $Button3 $RData = GUICtrlRead($Input1) $szData = $RData TCPSend($Socket, $szData) EndSelect WEnd Moral/Uses of this program. Basicly for example I run the server file on my computer, and the client on my laptop. They both connect. If I were to send /LockComputer From the Client program to the Server Program, it would activate the computers Lock Feature(The thing were you dont log off but you need a password to get back on) I use both my laptop and computer so I wanted to do some automation commands from my laptop and or vice versa. Note: I just noticed I had an input box on the Server Program, That isnt really needed so ignore that. If you guys could help me that would be appreciated. *{UPDATED SECTION}* So far the current code I was able to produce, using the info got from the Help file, was able to do some of what I needed. I know its a bit sloppy though but once I get the code right I could make it less sloppy. I am still running on some troubles though. If you guys can help me thank you. ***=Top Priority that I myself will be working on while waiting for responses. **=Important, Will work on in between working on Top Priority issues. *=Will work on after others have finished and or if changes are needed. List: *Client Connects to Server Successfully: Done(Or so It seems) **Using Case to allow multiple commands: Not Done ***Select Ip and Port on Client: Not Done ***Select Port for Server: Not Done **Shut Down Server but not program: Not Done **Disconnect Client and show disconnection message on server without server program shutting off: Not Done *Cleaner/Smoother Code and or GUI interface: Not Done ***Split String for commands such as /load http://www.google.com {something like if client sents "/link http://www.google.com"} Splits String to know that $Command = /link $Link = http://www.google.com Case $recv = "Link" ShellExecute($Link) Splitting Strings seem to have been completed but only confirmed through tests. Test Code: $Word = "/load http://www.youtube.com/" If StringInStr($Word, "/Load", 2) = True Then $Trimmed = StringTrimLeft($Word, 6) MsgBox(0, "Search result:", $Trimmed) EndIf Another I need is for the Client to receive some things from Server. For example the client sends /getNotepadText Server responds sending the client the text that is inside notepad. I am still working on this myself but I really would appreciate feedback on this, some help, coding, issues and stuff. Some things I don't know as I am still learning/working on it. Ill keep updating this with more info a long the way. Edit: use 127.0.0.1 when testing on one computer, I noticed that after testing without internet connection. Edit: Now that I look at it, the code seems a little tooooo sloppy, I think ill consider cleaning it a bit, might make things easier. Edited February 1, 2011 by KurogamineNox
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