Code:
#PBFORMS CREATED V1.51
#COMPILE EXE
#DIM ALL
'------------------------------------------------------------------------------
'   ** Includes **
'------------------------------------------------------------------------------
#PBFORMS BEGIN INCLUDES
#IF NOT %DEF(%WINAPI)
    #INCLUDE "WIN32API.INC"
#ENDIF
#PBFORMS END INCLUDES
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
'   ** Constants **
'------------------------------------------------------------------------------
#PBFORMS BEGIN CONSTANTS
%IDD_DIALOG1  = 100
%IDC_LISTBOX1 = 101
%IDC_QUIT     = 102
#PBFORMS END CONSTANTS
'------------------------------------------------------------------------------
%TCP_ACCEPT = %WM_USER + 4093  ' Any value larger than %WM_USER + 500
%TCP_ECHO   = %WM_USER + 4094  ' Any value larger than %WM_USER + 500
%FD_ACCEPT      = 8
%INVALID_SOCKET = &HFFFFFFFF???
%FD_READ        = 1
%FD_CLOSE       = 32
'------------------------------------------------------------------------------
'   ** Declarations **
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
#PBFORMS DECLARATIONS
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
'   ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
    ShowDIALOG1 %HWND_DESKTOP
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
'   ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION DlgProc()
    STATIC nServer   AS LONG
    STATIC hEcho     AS DWORD
    LOCAL  sBuffer   AS STRING
    LOCAL  sPacket   AS STRING
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler
          'hList = GetDlgItem(hDlg, 101)
          nServer = FREEFILE
          TCP OPEN SERVER PORT 62002 AS nServer  TIMEOUT 3000
          IF ERR THEN
            sBuffer = "Couldn't create socket!"
          ELSE
            TCP NOTIFY nServer, ACCEPT TO CBHNDL AS %TCP_ACCEPT
            sBuffer = "Connected to Port 62002"
          END IF
          LogEvent CBHNDL, %IDC_LISTBOX1, sBuffer
          hEcho = %INVALID_SOCKET
          FUNCTION = 1
        CASE %TCP_ACCEPT
          SELECT CASE CBLPARAM
            CASE %FD_ACCEPT
              hEcho = FREEFILE
              TCP ACCEPT nServer AS hEcho
              TCP NOTIFY hEcho, RECV CLOSE TO CBHNDL AS %TCP_ECHO
          END SELECT
          FUNCTION = 1
        CASE %TCP_ECHO
            SELECT CASE CBLPARAM
               CASE %FD_READ
                IF hEcho <> %INVALID_SOCKET THEN
                  ' Perform a receive-loop until there is no data left (ie, the end of stream)
                    sBuffer = ""
                    sPacket = ""
                  DO
                    TCP RECV hEcho, 1024, sBuffer
                    sPacket = sPacket + sBuffer
               
                    IF sBuffer = "" THEN EXIT DO '? "Buffer empty":exit do
                    IF ISTRUE EOF(hEcho) THEN EXIT DO '? " EOF":EXIT DO
                    IF ISTRUE ERR        THEN  EXIT DO '? "ERR" + STR$(ERRCLEAR)
                     SLEEP 5
                  LOOP
                  
                 LogEvent CBHNDL, %IDC_LISTBOX1, FORMAT$(LEN(sPacket)) + " bytes"
                
                 IF LEN(sBuffer) THEN TCP SEND hEcho,  "Received Ok!"
                
               ELSE
                  LogEvent CBHNDL, %IDC_LISTBOX1, "* FD_READ Error!"
               END IF
             CASE %FD_CLOSE
                TCP CLOSE hEcho
                hEcho = %INVALID_SOCKET
            END SELECT
            FUNCTION = 1

        CASE %WM_NCACTIVATE
            STATIC hWndSaveFocus AS DWORD
            IF ISFALSE CBWPARAM THEN
                ' Save control focus
                hWndSaveFocus = GetFocus()
            ELSEIF hWndSaveFocus THEN
                ' Restore control focus
                SetFocus(hWndSaveFocus)
                hWndSaveFocus = 0
            END IF
        CASE %WM_COMMAND
            ' Process control notifications
            SELECT CASE AS LONG CBCTL
              
                 CASE %IDC_QUIT
                   DIALOG END CBHNDL
                   FUNCTION = 1
             END SELECT
        CASE %WM_DESTROY
            TCP CLOSE nServer
            
        CASE %WM_SYSCOMMAND
               IF CBWPARAM = %SC_CLOSE AND &H00000FFF0 THEN
                   FUNCTION = 1 'end program
                   REM FUNCTION = 0 'don't end program
               END IF
            
    END SELECT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
'   ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt AS LONG
#PBFORMS BEGIN DIALOG %IDD_DIALOG1->->
    LOCAL hDlg  AS DWORD
    DIALOG NEW hParent, "Dialog1", 589, 393, 201, 110, %WS_POPUP OR _
        %WS_BORDER OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_CAPTION OR _
        %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR _
        %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
        %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _
        OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
    CONTROL ADD LISTBOX, hDlg, %IDC_LISTBOX1, , 5, 5, 185, 80
    CONTROL ADD BUTTON,  hDlg, %IDC_QUIT, "Quit", 75, 90, 65, 15
#PBFORMS END DIALOG
    DIALOG SHOW MODAL hDlg, CALL DlgProc TO lRslt
#PBFORMS BEGIN CLEANUP %IDD_DIALOG1
#PBFORMS END CLEANUP
    FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------
SUB LogEvent (hDlg AS DWORD, ID AS LONG, BYVAL Buffer AS STRING)
    LOCAL idx AS LONG
    Buffer = TIME$ + " - " + Buffer
    LISTBOX ADD hDlg, ID, Buffer
END SUB