Jump to content

Search the Community

Showing results for tags 'socket'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Announcements and Site News
    • Administration
  • AutoIt v3
    • AutoIt Help and Support
    • AutoIt Technical Discussion
    • AutoIt Example Scripts
  • Scripting and Development
    • Developer General Discussion
    • Language Specific Discussion
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • AutoIt Team
    • Beta
    • MVP
  • AutoIt
    • Automation
    • Databases and web connections
    • Data compression
    • Encryption and hash
    • Games
    • GUI Additions
    • Hardware
    • Information gathering
    • Internet protocol suite
    • Maths
    • Media
    • PDF
    • Security
    • Social Media and other Website API
    • Windows
  • Scripting and Development
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • Forum FAQ
  • AutoIt

Calendars

  • Community Calendar

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Member Title


Location


WWW


Interests

Found 4 results

  1. Hello, I just made another TCP server. I will use the server for data collection and a lot of clients can get the data from TCP. I now use it for UDP broadcast some devices to get their IP's. You can also use it for chat's. It is very low level, but so you have more options than with the pure AutoIt functions. Just start the server in SciTE to see the console outputs. Then you can start up to 63 clients to talk to the server. I hope you like it. Server script: #include "socket_UDF.au3" ;funkey 2013.06.21 _WSAStartup() Global $iSocket Global $iReturn Global $iPort = 20500 Global $sIP_Connected Global $iPort_Connected Global $tBuffer = DllStructCreate("char buffer[512]") $iSocket = _socket($AF_INET, $SOCK_STREAM, $IPPROTO_TCP) ConsoleWrite("Listen Socket: " & $iSocket & @CRLF) Global $tReUse = DllStructCreate("BOOLEAN reuse") DllStructSetData($tReUse, "reuse", True) ; enable reusing the same port $iReturn = _setsockopt($iSocket, $SOL_SOCKET, $SO_REUSEADDR, $tReUse) ; set reusing option for the port If $iReturn Then ConsoleWrite("SetSockOpt error setting reusing the same port!. Windows Sockets Error Codes: " & _WSAGetLastError() & @CRLF) EndIf $iReturn = _bind($iSocket, @IPAddress1, $iPort) ;local IP-Address and port to use If $iReturn Then ConsoleWrite("Bind error: " & $iReturn & @CRLF) ; 0 is OK EndIf $iReturn = _listen($iSocket, 1) If $iReturn Then ConsoleWrite("Listen error: " & $iReturn & @CRLF) ; 0 is OK EndIf Global $iNewSocket Global $tReadFds = DllStructCreate($tagFd_set) Global $tReadFds_Copy = DllStructCreate($tagFd_set) _FD_ZERO($tReadFds) _FD_SET($iSocket, $tReadFds) Global $iSocketMax = $iSocket Global $iSocketNow Global $sDataRcv While 1 DllCall('ntdll.dll', 'none', 'RtlMoveMemory', 'struct*', $tReadFds_Copy, 'struct*', $tReadFds, 'ULONG_PTR', DllStructGetSize($tReadFds)) $iReturn = _select($iSocketMax + 1, $tReadFds_Copy, 2000) ;timeout 2 seconds If _FD_ISSET($iSocket, $tReadFds_Copy) Then $iNewSocket = _accept($iSocket, $sIP_Connected, $iPort_Connected) _FD_SET($iNewSocket, $tReadFds) _FD_SHOW($tReadFds) If $iNewSocket > $iSocketMax Then $iSocketMax = $iNewSocket ConsoleWrite("New connected socket: " & $iNewSocket & @TAB & "IP: " & $sIP_Connected & @TAB & "Port: " & $iPort_Connected & @LF) EndIf For $i = 2 To DllStructGetData($tReadFds, "fd_count") $iSocketNow = DllStructGetData($tReadFds, "fd_array", $i) If _FD_ISSET($iSocketNow, $tReadFds_Copy) Then DllCall('ntdll.dll', 'none', 'RtlZeroMemory', 'struct*', $tBuffer, 'ULONG_PTR', DllStructGetSize($tBuffer)) If _recv($iSocketNow, $tBuffer) = $SOCKET_ERROR Then _closesocket($iSocketNow) _FD_CLR($iSocketNow, $tReadFds) Else $sDataRcv = DllStructGetData($tBuffer, 1) ConsoleWrite("Data received: " & $sDataRcv & @LF) If $sDataRcv == "CloseServer!" Then ExitLoop 2 EndIf EndIf EndIf Next WEnd For $i = 1 To DllStructGetData($tReadFds, "fd_count") _closesocket(DllStructGetData($tReadFds, "fd_array", $i)) Next _WSACleanup() Func _FD_SHOW(ByRef $tFd_set) For $i = 1 To DllStructGetData($tFd_set, "fd_count") ConsoleWrite($i & ":" & @TAB & DllStructGetData($tFd_set, "fd_array", $i) & @LF) Next EndFunc ;==>_FD_SHOWsocket_UDF and example.rar
  2. I am working on a code of Client-Server Connection for a while (Like Teamviewer) , the problem is that the server keeps disconnecting and connecting all the time , In the client i wrote a code to notify me each time server is online , I am getting around 10 notifications each 1 minute from same server : This is the server code : TCPStartup() Local $ConnectedSocket Local $My_IP = "127.0.0.1" Local $My_PORT = '5000' Local $UserID = "MyID" ; Connect Connect($My_IP, $My_PORT) While 1 If TCPConnect($My_IP, $My_PORT) <> -1 Then $recv = TCPRecv($ConnectedSocket, 2048) $RecvSpl = StringSplit($recv, "|") Switch $RecvSpl[1] Case "order1" ; Do something MsgBox(64,"Success","You are now connected to the client") AddLogToClinet("My server is Online", $UserID, "Green") EndSwitch Else $Connected = False Connect($IP, $My_PORT) EndIf Sleep(100) WEnd ; Connect To the Client Func Connect($IP, $Port) Local $iConnectAttempts = 0 TCPStartup() Do $ConnectedSocket = TCPConnect($IP, $Port) Sleep(1000) Until ($ConnectedSocket > 0 or $iConnectAttempts > 10) Return SetError(@error, 0, $ConnectedSocket) EndFunc ;==>Connect ; Send To Client Func SockSend($Cmd, $Text) TCPSend($ConnectedSocket, $Cmd & $SockSpl & $Text & $PocketSpl, 4) EndFunc ;==>SockSend ; Add Log To Server Func AddLogToClinet($Data, $UserID, $Color) SockSend("AddLog", $Data & $SockSpl & $UserID & $SockSpl & $Color) EndFunc ;==>AddLogToClinet At first the Connection function was : ; Connect To the Client ( Old ) Func Connect($IP, $Port) TCPStartup() $ConnectedSocket = TCPConnect($IP, $Port) If @error Then Connect($IP, $My_PORT) ; <<<<<<<<<<<<<<< This was the causing recursion error Else $Connected = True EndIf EndFunc ;==>Connect It was working good , except I had 'recursion level has been exceeded error (old one) I've tried increasing the delay for current code by : Opt("TCPTimeout", 5000) However it did not help yet what do you suggest to me ?
  3. Hi guys, I've tried some difficults realizing a simple whois from whois.radb.net. I've tried to query "-i origin AS32934", the right way to retrieve all FB IPs (as developer page says) but I really don't understand what is wrong with my script: $ws = DllOpen("ws2_32.dll") TCPStartup() $ip = TCPNameToIP("whois.radb.net") $socket = TCPConnect($ip, 43) TCPSend($socket, "-i origin AS32934") Local $text While 1 $recv = TCPRecv($socket, 2048) If @error Then $aRet = DllCall($ws, "int", "WSAGetLastError") MsgBox(0,$recv,$aRet[0]) ExitLoop EndIf If $recv <> "" Then $text &= $recv EndIf WEnd ConsoleWrite(@CRLF & $text & @CRLF) TCPCloseSocket($socket) TCPShutdown() The loops ends as soon as TCPRecv is called... and WSAGetLastError reports no error! Thanks to all
  4. Hi everybody! I wanted to learn winsockets, and for this, I try to reproduce AutoIt's TCP functions. My code is working pretty good! I juste want somebody, an AutoIt dev, to look my code and tell me if I'm doing something wrong, or something need to be done differently. Another problem, is that when I close a socket on one side of a connection, the recv functions in the other side doesn't detect the close action! (like TCPRecv would return an @error) Thanks in advance! (I compile it with GCC 4x) Here is the code #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 #include <windows.h> #include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi.h> #include <stdio.h> #include <stdlib.h> /* -------------------------------------------------------------------------- */ #define SIMPLE_TCP_BUILD_DLL #include "simpletcp.h" /* -------------------------------------------------------------------------- */ #define CHECK_INIT if (_global_ == NULL) return; #define CHECK_INIT_RET(ret) if (_global_ == NULL) return ret; #define SET_ERR(func) sprintf(_global_->err_func, "%s", func); _global_->err = WSAGetLastError(); #define UNSET_ERR sprintf(_global_->err_func, "%s", ""); _global_->err = 0; /* -------------------------------------------------------------------------- */ typedef struct { WSADATA wsaData; char err_func[20]; int err; } simple_tcp_t; simple_tcp_t* _global_ = NULL; /* -------------------------------------------------------------------------- */ /* Standard functions */ /** \brief * * \return */ int SIMPLE_TCP TCPStartup () { if (_global_ != NULL) { return 1; } _global_ = malloc(sizeof(simple_tcp_t)); if (_global_ == NULL) { return 0; } if (WSAStartup(MAKEWORD(2, 2), &_global_->wsaData) != 0) { free(_global_); _global_ = NULL; return 0; } UNSET_ERR return 1; } /** \brief * * \return */ void SIMPLE_TCP TCPShutdown () { if (_global_ == NULL) { return; } WSACleanup(); free(_global_); _global_ = NULL; } /** \brief * * \param * \param * * \return */ int SIMPLE_TCP TCPGetError (char* err_func, const size_t err_func_len) { CHECK_INIT_RET(0) int err = _global_->err; if (err_func != NULL && err_func_len > 0) { snprintf(err_func, err_func_len, "%s", _global_->err_func); } UNSET_ERR return err; } /** \brief * * \param * \param * * \return */ int SIMPLE_TCP TCPConnect (const char* host, const char* port) { CHECK_INIT_RET(0) UNSET_ERR struct addrinfo hints, *result = NULL; ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; // IP v4 hints.ai_socktype = SOCK_STREAM; // Stream socket hints.ai_protocol = IPPROTO_TCP; // TCP if (getaddrinfo(host, port, &hints, &result) != 0) { SET_ERR("getaddrinfo") return 0; } SOCKET ConnectSocket = INVALID_SOCKET; ConnectSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (ConnectSocket == INVALID_SOCKET) { freeaddrinfo(result); SET_ERR("socket") return 0; } if (connect(ConnectSocket, result->ai_addr, (int)result->ai_addrlen) != 0) { freeaddrinfo(result); SET_ERR("connect") return 0; } freeaddrinfo(result); unsigned long mode = 1; if (ioctlsocket(ConnectSocket, FIONBIO, &mode) != 0) { SET_ERR("ioctlsocket") return 0; } return ConnectSocket; } /** \brief * * \param * * \return */ int SIMPLE_TCP TCPListen (const char* port) { CHECK_INIT_RET(0) UNSET_ERR struct addrinfo hints, *result = NULL; ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; // IP v4 hints.ai_socktype = SOCK_STREAM; // Stream socket hints.ai_protocol = IPPROTO_TCP; // TCP hints.ai_flags = AI_PASSIVE; // this + node = NULL => local host IP if (getaddrinfo(NULL, port, &hints, &result) != 0) { SET_ERR("getaddrinfo") return 0; } SOCKET ListenSocket = INVALID_SOCKET; ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (ListenSocket == INVALID_SOCKET) { freeaddrinfo(result); SET_ERR("socket") return 0; } unsigned long mode = 1; if (ioctlsocket(ListenSocket, FIONBIO, &mode) != 0) { freeaddrinfo(result); SET_ERR("ioctlsocket") return 0; } if (bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen) != 0) { freeaddrinfo(result); SET_ERR("bind") return 0; } freeaddrinfo(result); if (listen(ListenSocket, SOMAXCONN) != 0) { SET_ERR("listen") return 0; } return ListenSocket; } /** \brief * * \param * * \return */ int SIMPLE_TCP TCPAccept (int socket) { CHECK_INIT_RET(0) UNSET_ERR int err; SOCKET ClientSocket = INVALID_SOCKET; ClientSocket = accept(socket, NULL, NULL); err = WSAGetLastError(); if (ClientSocket == INVALID_SOCKET && err != WSAEWOULDBLOCK) { SET_ERR("accept") return INVALID_SOCKET; } if (ClientSocket != INVALID_SOCKET) { unsigned long mode = 1; if (ioctlsocket(ClientSocket, FIONBIO, &mode) != 0) { SET_ERR("ioctlsocket") return INVALID_SOCKET; } } return ClientSocket; } /** \brief * * \param * * \return */ int SIMPLE_TCP TCPCloseSocket (int socket) { CHECK_INIT_RET(0) UNSET_ERR if (shutdown(socket, SD_BOTH) != 0) { SET_ERR("shutdown") return 0; } if (closesocket(socket) != 0) { SET_ERR("closesocket") return 0; } return 1; } /** \brief * * \param * \param * \param * * \return */ int SIMPLE_TCP TCPSend (int socket, const char* data, const size_t data_len) { CHECK_INIT_RET(0) UNSET_ERR int ret = send(socket, data, data_len, 0); if ((ret == SOCKET_ERROR || ret == 0) && WSAGetLastError() != WSAEWOULDBLOCK) { SET_ERR("send") return 0; } return ret; } /** \brief * * \param * \param * \param * * \return */ int SIMPLE_TCP TCPRecv (int socket, char* data, const size_t data_len) { CHECK_INIT_RET(0) UNSET_ERR int ret = recv(socket, data, data_len, 0); if ((ret == 0 || ret == SOCKET_ERROR) && WSAGetLastError() != WSAEWOULDBLOCK) { SET_ERR("recv") return 0; } return ret; } /** \brief * * \param * \param * \param * * \return */ int SIMPLE_TCP TCPNameToIP (const char* name, char* ip, const size_t ip_len) { CHECK_INIT_RET(0) UNSET_ERR struct addrinfo hints, *result = NULL; ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; // IP v4 hints.ai_socktype = SOCK_STREAM; // Stream socket hints.ai_protocol = IPPROTO_TCP; // TCP if (getaddrinfo(name, NULL, &hints, &result) != 0) { SET_ERR("getaddrinfo") return 0; } if (result->ai_family != AF_INET || result->ai_addrlen != sizeof(struct sockaddr_in)) { SET_ERR("bad address family") freeaddrinfo(result); return 0; } struct sockaddr_in* addr = (struct sockaddr_in*)result->ai_addr; char* ret = inet_ntoa(addr->sin_addr); snprintf(ip, ip_len, "%s", ret); freeaddrinfo(result); return 1; } /** \brief * * \param * \param * \param * * \return */ int SIMPLE_TCP TCPSocketToIP (int socket, char* ip, const size_t ip_len) { CHECK_INIT_RET(0) UNSET_ERR struct sockaddr_in addr_in; int len = sizeof(addr_in); if (getpeername(socket, (struct sockaddr*)&addr_in, &len) != 0) { SET_ERR("getpeername") return 0; } char* ret = inet_ntoa(addr_in.sin_addr); if (ret == NULL) { SET_ERR("inet_ntoa") return 0; } snprintf(ip, ip_len, "%s", ret); return 1; } and the header #ifndef __SIMPLE_TCP_H__ #define __SIMPLE_TCP_H__ #ifdef SIMPLE_TCP_BUILD_DLL #define SIMPLE_TCP __stdcall __declspec(dllexport) #else #define SIMPLE_TCP __stdcall __declspec(dllimport) #endif /* -------------------------------------------------------------------------- */ /* Standard functions */ int SIMPLE_TCP TCPStartup (); void SIMPLE_TCP TCPShutdown (); int SIMPLE_TCP TCPGetError (char* err_func, const size_t err_func_len); int SIMPLE_TCP TCPConnect (const char* ip, const char* port); int SIMPLE_TCP TCPListen (const char* port); int SIMPLE_TCP TCPAccept (int socket); int SIMPLE_TCP TCPCloseSocket (int socket); int SIMPLE_TCP TCPSend (int socket, const char* data, const size_t data_len); int SIMPLE_TCP TCPRecv (int socket, char* data, const size_t data_len); int SIMPLE_TCP TCPNameToIP (const char* name, char* ip, const size_t ip_len); int SIMPLE_TCP TCPSocketToIP (int socket, char* ip, const size_t ip_len); #endif // __SIMPLE_TCP_H__
×
×
  • Create New...