[ Foro de Pascal ]

Sobre redes.

23-Sep-2014 18:14
Luis Torres (+12)
3 Respuestas

Ojalá el profesor Nacho Cabanes pueda llevar a cabo el tutorial sobre cómo desarrollar aplicaciones en redes (como por ejemplo, juegos) que quedó pendiente meses atrás.

Saludos.


28-Sep-2014 12:04
Nacho Cabanes (+31)

No garantizo que lo pueda hacer. Estuve mirando el soporte de redes de Free Pascal y me pareció bastante engorroso, muy de bajo nivel y dependiendo de bibliotecas no estándar.

En el curso de C# sí tiene varias pinceladas, tanto para acceso a sitios web como para comunicación entre 2 equipos.


11-Oct-2014 13:39
Invitado (adn)

Freepascal incluye la librería nativa sockets: http://www.freepascal.org/docs-html/rtl/sockets/

Librerías de terceros que he usado: LNet (componentes visuales para Lazarus) y Synapse (la más completa de las librerías que hay).

De todos modos, como digo al principio, hay una librería nativa (Unit sockets).

De manera muy resumida, necesitamos algunas estructuras (este ejemplo sería un cliente):  

 
ServerAddr       : TInetSockAddr;//para manejar la estructura del servidor.
 


Y un par de enteros:

 
ClientSocket     : Longint;//Para el descriptor del socket cliente.
Puerto           : integer;//Para el puerto del servidor.
 


La verdad que sencillo no es, por ejemplo el tratamiento de la dirección IP, necesitaremos funciones especiales para esto.

Luego declaramos el socket:

 
ClientSocket:= fpSocket(AF_INET,SOCK_STREAM,0);//nos devuelve un entero
If ClientSocket = -1 Then MostrarError('----> Error al crear el socket.') else WriteLn('---> Socket creado.');
 
//rellenamos la estructura y nos conectamos
  ServerAddr.sin_family := AF_INET;
  ServerAddr.sin_port := htons(Puerto);
  ServerAddr.sin_addr.s_addr:= htonl(IpValue);
  If fpconnect(ClientSocket,@ServerAddr,Sizeof(ServerAddr)) = -1 Then MostrarError('---> Error al conectar al servidor.') else
  WriteLn('---> Conexión establecida sin errores. Leyendo datos del servidor...');
 


Para escribir en el socket:

 
  text:= 'Hola mundo!!' + #13#10;
  if fpsend(ClientSocket, @text[1], length(text), 0) = -1 Then MostrarError('---> Error al enviar información.') else WriteLn('La cadena: ' , text, ' se ha enviado correctamente');
 


Para leer del socket:

 
Count := fprecv(ClientSocket,@Buffer[1],255,0);//recibimos
SetLength(Buffer,Count);//ajustamos lo leido al tamaño definido del buffer que es 255
      if Count = -1 then MostrarError('---> Error recibiendo datos.') else WriteLn(buffer);
 



Con el servidor es algo más complicado, creo que se requiere el uso de hilos además de saber de sockets, aunque se pueden escribir servidores sencillos sin usar hilos.

Espero que le sirva a alguien. Yo también me alegraría mucho si el profe Nacho escribiera algún tutorial sobre el uso de sockets, ya que son un poco complejos y seguro nos aclararía un montón de conceptos.

En la red hay información bastante buena, pero desactualizada, por ejemplo en esta página que es la que yo uso de referencia: http://www.bastisoft.de/programmierung/pascal/pasinet.html

Saludos.


11-Oct-2014 15:23
Luis Torres (+12)

Gracias por la información. Y sí, esperemos que el profesor Nacho escriba algo que nos deje un poco más cerca de obtener los conocimientos ideales para dominar esta parte de la programación.

Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)