Ante todo decir que creo que tienes algo liado el concepto del código del servidor y el de cliente. Yo creo que lo has hecho al revés.
Vamos a explicar brevemente el funcionamiento de estas partes:
Antes de nada, debe haber un programa servidor funcionando para que el/los programa/s cliente/s se pueda/n conectar a él. Por eso se tiene que crear inicialmente un programa servidor que primeramente escuche de una dirección (la del servidor) y un puerto (TCPListen) las posibles peticiones de conexión. Acabamos de crear un Socket de escucha. Después debes aceptar o no las conexiones (TCPAccept). Una vez que ya has conectado, queda recibir los datos que te envían (TCPRecv).
El cliente tiene que conectar con ese programa servidor. Para eso utiliza la función TCPConnect. Una vez que conecta, se pueden envíar los datos al servidor (TCPSend) los cuales recibirá.
Que decir tiene que un mismo programa puede hacer de cliente-servidor al mismo tiempo para tener una comunicación en ambos sentidos.
Si te das cuenta lo has hecho al revés. El código del cliente pertenece al del servidor y viceversa.
Además, he visto fallos en tus códigos.
En el código que has puesto como servidor, yo creo que te has liado un poquito y querías poner lo que viene en el ejemplo de la función TCPRecv:
Código: Seleccionar todo
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
;Wait for and Accept a connection
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
Y en el código del cliente deberías poner lo que viene en el ejemplo de TPCSend:
Código: Seleccionar todo
TCPStartup()
; Initialize a variable to represent a connection
;==============================================
$ConnectedSocket = -1
;Attempt to connect to SERVER at its IP and PORT 33891
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
Es simplemente copiar, pegar y modificar los códigos cliente-servidor que te vienen como ejemplo en la ayuda, en las funciones que te digo arriba.
Aunque los hubieses puesto en su sitio, tus códigos siguen teniendo fallos:
Dim $szIPADDRESS = "IP cliente"
Aquí se pone la ip del servidor.
Código: Seleccionar todo
$MainSocket = TCPConnect($szIPADDRESS,$nPORT)
If $MainSocket = -1 Then
Do
$MainSocket = TCPConnect($szIPADDRESS,$nPORT)
Until $ConnectedSocket <> -1
EndIf
Que es esto? Si quieres volver a intentar conectar al servidor hazlo por ejemplo así y no te repitas. Además, te has equivocado al poner la condición de salida de la variable $ConnectedSocket, ya que esta nunca cambia en el bucle, cambia $MainSocket :
Código: Seleccionar todo
Do
$ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
sleep(100)
Until $ConnectedSocket > 0
En el código que has puesto como cliente falla la variable $SHOCK. Esta tiene que ser $sock:
Código: Seleccionar todo
$sh_form = GUICreate("Shell remota con: "&SocketToIP($SOCK), 675, 373, 192, 124)
Solamente he mirado el código inicial de conexión. Lo demás no, excepto lo que te dije anteriormente que me daba error y no podía ejecutarlo si no lo corregía.
Yo he probado código compilado de este tipo en 3 S.O. distintos y no me han dado ningún problema (xp sp3, win7 profesional 32 bits, win7 home 64 bit). También tengo que decir que he probado el cliente y el servidor en el mismo ordenador, ya que no los tengo conectados en red.
Si después de todo no te funciona, mira a ver los consejos de BasicOs, no sea que el servidor o algún ordenador tenga capada la entrada de datos por programas de este tipo, los cuales acceden por un puerto y tal.
Saludos.