Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Cramel] Socket.cml ~ De la librería de Cramel

  • 0 Respuestas
  • 2587 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BlackBlex

  • *
  • Underc0der
  • Mensajes: 49
  • Actividad:
    0%
  • Reputación 4
    • Ver Perfil
  • Skype: blackblex
  • Twitter: blackblex
« en: Julio 05, 2017, 09:09:31 pm »
Les traigo este código el cual es solo una transcripción a Clase de la librería Socket que viene por defecto en Cramel

Información
  • Compatible con Cramel: 2.0.0.362


Tiene los siguientes métodos la clase SocketServer:
  • iniciar(Opcional Referencia Versión:Cadena = "2.2"):Booleano - Hace preparaciones para poder iniciar el servidor
  • escuchar(Puerto:Word, Opcional nConecciones:Entero = 255):Entero - Pone en escucha el servidor
  • aceptar(Opcional pProcThread:Entero):Entero - Acepta una conexión entrante
  • enviar(sockt:Entero, Referencia Datos:Cadena):Entero - Envia un dato a otra conexión
  • recibir(sockt:Entero, Opcional Tamaño:Entero = 1024):Cadena - Recibe un dato de otra conexión
  • detener
  • desconectar

Tiene los siguientes métodos la clase SocketClient:
  • iniciar(Opcional Referencia Versión:Cadena = "2.2"):Booleano - Hace preparaciones para poder iniciar el servidor
  • conectar(Referencia IP:Cadena, Puerto:Word):Entero - Se conecta a una dirección y puerto especifico
  • enviar(Referencia Datos:Cadena):Entero - Envía un dato
  • recibir(Opcional Tamaño:Entero = 1024):Cadena - Recibe un dato
  • detener
  • desconectar

Tiene las siguientes Propiedades:
  • IP - Devuelve la ip usada en la conexión
  • Puerto - Devuelve el puerto usado en la conexión
  • NumConexiones - Devuelve el numero máximo de conexiones permitidas
  • SocketPtr - Devuelve el puntero del socket

Para usarla solo es de Importar la librería Cramel, Socket y API (que viene por defecto en cramel); después declaramos una variable del tipo SocketServer o SocketClient y creamos el objecto.

Y es todo por el momento.

Aquí el código Socket.cml:
Código: Text
  1. '/**
  2. ' * Socket
  3. ' *
  4. ' * @author  Yuki
  5. ' *
  6. ' * ==============Information==============
  7. ' *      Filename: Socket.cml
  8. ' * ---------------------------------------
  9. '*/
  10.  
  11. Var TCP_Private_Init_Count:Byte
  12.  
  13. Clase SocketInfo,_
  14.     sIP:Cadena,_
  15.     sPuerto:Word,_
  16.     sConexiones:Entero,_
  17.     sVersión:Cadena,_
  18.     sSocket:Entero,_
  19.     @host:hostent,_
  20.     @ptr:Entero,_
  21.     i:Entero
  22.  
  23.     Sección Privada
  24.         Proc setSIP(nuevo:Cadena)
  25.             sIP = nuevo
  26.         FinProc
  27.         Proc getSIP:Cadena
  28.             Resultado = sIP
  29.         FinProc
  30.  
  31.         Proc setSPuerto(nuevo:Word)
  32.             sPuerto = nuevo
  33.         FinProc
  34.         Proc getSPuerto:Word
  35.             Resultado = sPuerto
  36.         FinProc
  37.  
  38.         Proc setSConexiones(nuevo:Entero)
  39.             sConexiones = nuevo
  40.         FinProc
  41.         Proc getSConexiones:Entero
  42.             Resultado = sConexiones
  43.         FinProc
  44.  
  45.         Proc setSVersión(nuevo:Cadena)
  46.             sVersión = nuevo
  47.         FinProc
  48.         Proc getSVersión:Cadena
  49.             Resultado = sVersión
  50.         FinProc
  51.  
  52.         Proc setSSocket(nuevo:Entero)
  53.             sSocket = nuevo
  54.         FinProc
  55.         Proc getSSocket:Entero
  56.             Resultado = sSocket
  57.         FinProc
  58.  
  59.     Sección Pública
  60.         Prop IP:Cadena
  61.             Lectura:getSIP
  62.             Escritura:setSIP
  63.         FinProp
  64.  
  65.         Prop Puerto:Word
  66.             Lectura:getSPuerto
  67.             Escritura:setSPuerto
  68.         FinProp
  69.  
  70.         Prop NumConexiones:Entero
  71.             Lectura:getSConexiones
  72.             Escritura:setSConexiones
  73.         FinProp
  74.  
  75.         Prop Versión:Cadena
  76.             Lectura:getSVersión
  77.             Escritura:setSVersión
  78.         FinProp
  79.  
  80.         Prop SocketPtr:Entero
  81.             Lectura:getSSocket
  82.             Escritura:setSSocket
  83.         FinProp
  84.  
  85.         Proc ObtenerIP(Referencia Dirección:Cadena):Entero[]
  86.             i = inet_addr(Dirección)
  87.             Si i <> SOCKET_ERROR Entonces
  88.                 ReDim Resultado,1
  89.                 Resultado[0] = i
  90.                 Salir
  91.             SiNo
  92.                 host@ = GetHostByName(dirección)
  93.                 ReDim Resultado,host.h_length
  94.                 i = 0
  95.                 Contar i a host.h_length - 1
  96.                     ptr@ = host.h_addr_list + (i * 4)
  97.                     Resultado[i] = ptr
  98.                 Seguir
  99.             FinSi
  100.         FinProc
  101.  
  102.         Proc ConvertirIP(direccion:Entero):Cadena
  103.             i = 0
  104.             Mientras i < 4
  105.                 Resultado = Resultado + EntCad(direccion And 255)
  106.                 Si (i < 3) Entonces Resultado = Resultado + "."
  107.                 direccion = direccion Shr 8
  108.                 i = i + 1
  109.             FinMientras
  110.         FinProc
  111.  
  112. FinClase
  113.  
  114. Clase SocketServer(SocketInfo),_
  115.     wData:WSADATA,_
  116.     Ver:Word,_
  117.     Info:SOCKADDR_IN,_
  118.     Addr:SOCKADDR_IN,_
  119.     Size:Entero
  120.    
  121.     Sección Pública
  122.         Proc iniciar(Opcional Referencia Versión:Cadena = "2.2"):Booleano
  123.             Si TCP_Private_Init_Count >= 1 Entonces Salir
  124.             Seleccionar Versión
  125.                 Caso "2.2"
  126.                     Ver = MakeWord(2,2)
  127.             FinSeleccionar
  128.             Resultado = (WSAStartup(Ver, wData) = OK)
  129.             Si Resultado Entonces
  130.                 TCP_Private_Init_Count = TCP_Private_Init_Count + 1
  131.                 setSVersión(Versión)
  132.             FinSi
  133.         FinProc
  134.  
  135.         Proc escuchar(Puerto:Word, Opcional nConecciones:Entero = 255):Entero
  136.             Resultado = socket(AF_INET,SOCK_STREAM,0)
  137.             Si Resultado = INVALID_SOCKET Entonces Devolver 0
  138.             Info.sin_family = AF_INET
  139.             Info.sin_addr.s_addr = INADDR_ANY
  140.             Info.sin_port = htons(Puerto)
  141.             Si bind(Resultado, Info, &SOCKADDR_IN) = SOCKET_ERROR Entonces
  142.                 closesocket(Resultado)
  143.                 Devolver -1
  144.             FinSi
  145.             Si listen(Resultado, nConecciones) = SOCKET_ERROR Entonces
  146.                 closesocket(Resultado)
  147.                 Devolver -1
  148.             FinSi
  149.             setSPuerto(Puerto)
  150.             setSConexiones(nConecciones)
  151.             setSSocket(Resultado)
  152.         FinProc
  153.  
  154.         Proc aceptar(Opcional pProcThread:Entero):Entero
  155.             Si getSSocket = INVALID_SOCKET Entonces Salir
  156.             Resultado = accept(getSSocket, Addr, &SOCKADDR_IN)
  157.             Si Resultado = INVALID_SOCKET Entonces Devolver 0
  158.             Si pProcThread Entonces Resultado = CreateThread(0,0,pProcThread,Resultado,0,0)
  159.         FinProc
  160.  
  161.         Proc enviar(sockt:Entero, Referencia Datos:Cadena):Entero
  162.             Si sockt = INVALID_SOCKET Entonces Salir
  163.             Resultado = send(sockt, Datos@@, CadLong(Datos), 0)
  164.         FinProc
  165.  
  166.         Proc recibir(sockt:Entero, Opcional Tamaño:Entero = 1024):Cadena
  167.             Si sockt = INVALID_SOCKET Entonces Devolver ""
  168.             Resultado = Espacio(Tamaño)
  169.             Size = recv(sockt, Resultado@@, Tamaño,0)
  170.             Si Size <> 0 Entonces
  171.                 Resultado = Parte(Resultado,1,Size)
  172.             SiNo
  173.                 Resultado = ""
  174.             FinSi
  175.         FinProc
  176.  
  177.         Proc detener
  178.             Si TCP_Private_Init_Count >= 1 Entonces TCP_Private_Init_Count = TCP_Private_Init_Count - 1
  179.             WSACleanup
  180.         FinProc
  181.  
  182.         Proc desconectar(sockt:Entero)
  183.             closesocket(sockt)
  184.         FinProc
  185.  
  186. FinClase
  187.  
  188. Clase SocketClient(SocketInfo),_
  189.     wData:WSADATA,_
  190.     Ver:Word,_
  191.     Cliente:SOCKADDR_IN,_
  192.     IPs[]:Entero,_
  193.     i:Entero,_
  194.     Size:Entero
  195.    
  196.     Sección Pública
  197.         Proc iniciar(Opcional Referencia Versión:Cadena = "2.2"):Booleano
  198.             Si TCP_Private_Init_Count >= 1 Entonces Salir
  199.             Seleccionar Versión
  200.                 Caso "2.2"
  201.                     Ver = MakeWord(2,2)
  202.             FinSeleccionar
  203.             Resultado = (WSAStartup(Ver,wData) = OK)
  204.             Si Resultado Entonces
  205.                 TCP_Private_Init_Count = TCP_Private_Init_Count + 1
  206.                 setSVersión(Versión)
  207.             FinSi
  208.         FinProc
  209.  
  210.         Proc conectar(Referencia IP:Cadena, Puerto:Word):Entero
  211.             Resultado = socket(AF_INET,SOCK_STREAM,0)
  212.             Si Resultado = INVALID_SOCKET Entonces Devolver 0
  213.             Cliente.sin_family = AF_INET
  214.             Cliente.sin_port = htons(Puerto)
  215.             IPs = ObtenerIP(IP)
  216.             Contar i a (&IPs - 1)
  217.                 Cliente.sin_addr.s_addr = IPs[i]
  218.                 Si connect(Resultado, Cliente, &SOCKADDR_IN) = OK Entonces
  219.                     setSPuerto(Puerto)
  220.                     setSIP(IP)
  221.                     setSSocket(Resultado)
  222.                     Salir
  223.                 FinSi
  224.             Seguir
  225.             closesocket(Resultado)
  226.             Resultado = -1
  227.         FinProc
  228.  
  229.         Proc enviar(Referencia Datos:Cadena):Entero
  230.             Si getSSocket = INVALID_SOCKET Entonces Salir
  231.             Resultado = send(getSSocket, Datos@@, CadLong(Datos), 0)
  232.         FinProc
  233.  
  234.         Proc recibir(Opcional Tamaño:Entero = 1024):Cadena
  235.             Si getSSocket = INVALID_SOCKET Entonces Devolver ""
  236.             Resultado = Espacio(Tamaño)
  237.             Size = recv(getSSocket,Resultado@@,Tamaño,0)
  238.             Si Size <> 0 Entonces
  239.                 Resultado = Parte(Resultado,1,Size)
  240.             SiNo
  241.                 Resultado = ""
  242.             FinSi
  243.         FinProc
  244.  
  245.         Proc detener
  246.             Si TCP_Private_Init_Count >= 1 Entonces TCP_Private_Init_Count = TCP_Private_Init_Count - 1
  247.             WSACleanup
  248.         FinProc
  249.  
  250.         Proc desconectar
  251.             closesocket(getSSocket)
  252.         FinProc
  253.  
  254. FinClase

Cualquier sugerencia, o error, comenten.

 

¿Te gustó el post? COMPARTILO!



[Cramel] Brute Force Dictionary Creator by 79137913 [Aplicación + Source]

Iniciado por BlackBlex

Respuestas: 0
Vistas: 2704
Último mensaje Julio 01, 2017, 07:04:10 pm
por BlackBlex
Como trabajar Cramel con Sublime Text | Actualizado [Cramel2| 20/Junio/17]

Iniciado por BlackBlex

Respuestas: 1
Vistas: 1443
Último mensaje Febrero 23, 2017, 08:18:21 am
por ANTRAX
[Cramel] Regedit.cml ~ Crea, Edita y Elimina claves del Registro

Iniciado por BlackBlex

Respuestas: 0
Vistas: 2546
Último mensaje Julio 05, 2017, 08:30:39 pm
por BlackBlex
[Cramel] File pumper + (Source) | Agrega peso a tus archivos

Iniciado por BlackBlex

Respuestas: 8
Vistas: 3664
Último mensaje Marzo 23, 2017, 07:58:04 pm
por Riojas
[Cramel] Componentes para Ventanas | 5 de Julio del 2017

Iniciado por BlackBlex

Respuestas: 0
Vistas: 2658
Último mensaje Abril 10, 2017, 04:25:47 pm
por BlackBlex