Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - FanAdmin

#1
.NET (C#, VB.NET, ASP) / Re: Servidor socket TCP C#
3 Septiembre 2017, 18:23 PM
Cita de: AlbertoBSD en  2 Septiembre 2017, 17:19 PM
Opinaria lo mismo que Rekt sobre reinventar la Rueda, C# generalemente ya tiene una API para cualquier cosa, Enviar correso, Enviar peticiones WEB, SQL etc... etc...

Si programas desde 0 (Reinventando la Rueda) Esta bien con fines didacticos e incluso siento yo que aprendes mejor. Pero si te faltan bases sobre como funcionan los ciclos e incluso como funcionan las conexiones TCP/IP entre otros puede salir contraproducente. Te puedes confundir muy facilmente e incluso terminar Frustrado.

Saludos!

Buenas tardes, si estoy de acuerdo con ustedes dos, fue una mala idea meterme con conexiones TCP vía sockets a primera vista sin entender su funcionamiento, por esto opte por estudiar de 0 como me lo planteaste y poco a poco voy entendiendo mejor. Saludos!!
#2
.NET (C#, VB.NET, ASP) / Re: Servidor socket TCP C#
3 Septiembre 2017, 18:20 PM
Cita de: Rekt en  2 Septiembre 2017, 17:06 PM
Esperas saber programar un boombang desde 0 sin saber nisiquiera como funciona un bucle?  :silbar:.
Tu problema principal es que solo lees una vez lo que el cliente te envía y que estas reinventando la rueda.

Buenas tardes, no se bien a qué te refieres, soy sincero, lo único que hice es buscar conexiones de sockets para mí app en Google.
Si así mismo, eso me sucedía, pero ya opte por dejarlo. Saludos!
#3
Intenté cambiar el código pero sigue resultando lo mismo...

Nuevo SERVER.CS:
Código (csharp) [Seleccionar]
using System;
using System.Net;
using System.Text;
namespace
{
   class Server
   {
       public static Socket serverSocket, clientSocket;
       public const int Port = 8888;
       private byte[] buffer;

       public void Start()
       {
           //Server server = new Server();
           //Server.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           //Server.serverSocket.Bind(new IPEndPoint(IPAddress.Any, Port));
           Server.serverSocket.Listen(999);
           clientSocket = serverSocket.Accept();
           buffer = new byte[clientSocket.ReceiveBufferSize];
           while (buffer.Length > 0)
           {
               try
               {
                   int received = clientSocket.Receive(buffer);
                   if (received != 0)
                   {
                       Array.Resize(ref buffer, received);
                       string receivedMsg = UTF8Encoding.UTF8.GetString(buffer);
                       Array.Resize(ref buffer, clientSocket.ReceiveBufferSize);
                       if (receivedMsg.Contains("policy-file-request"))
                       {
                           if (Clients.OrganizarClientes(Convert.ToString(clientSocket.LocalEndPoint)))
                           {
                               sendMsg("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"8888\" /></cross-domain-policy>");
                               clientSocket.Close();
                               Start();
                           }
                           else
                           {
                               Console.WriteLine("Nuevo cliente: " + clientSocket.LocalEndPoint);
                               sendMsg("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"8888\" /></cross-domain-policy>");
                               clientSocket.Close();
                               Start();
                           }
                       }
                       else
                       {
                           Console.WriteLine("Cliente" + clientSocket.LocalEndPoint + ": " + receivedMsg);
                           Messages.Messages.ClasificarMsg(receivedMsg);
                           Start();
                       }
                   }
                   else { return; }
               }
               catch (Exception ex) { }
           } Start();
       }

       public static void sendMsg(string data)
       {
           clientSocket.Send(UTF8Encoding.UTF8.GetBytes(data));
           
       }
   }
}


Lo que ocurre en el emulador al ejecutarlo e iniciar el cliente es:

Nuevo Cliente: IP:8888
Cliente: Conexión establecida
Servidor: TestMensaje

Y en el Cliente se visualiza el mensaje "TestMensaje"...

Pero en cambio, el cliente envía un packet cada 1 segundo, pero no se visualiza en el servidor...
#4
OPTÉ POR DEJAR ESTE TOPIC

Buenas, estoy creando un Cliente via Sockets en AS3, y su respectivo servidor en C#...
Funciona bien solo que el servidor C# solo lee la primera entrada que le envía el cliente al iniciar la conexión cliente servidor.
Luego el Cliente si envía packets, el servidor ya no lo escucha...
Y aquí les dejo el código:


ENTRADA PRINCIPAL DEL PROGRAMA EN C# CONSOLA
using System;
using SnapServer.SaptConn.Network;
using System.Net.Sockets;
using System.Net;

namespace SaptServer
{
   class Program
   {
       public const int Port = 8888;
       public static string[] ClientsOnline;
       static void Main(string[] args)
       {
           Server server = new Server();
           Server.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           Server.serverSocket.Bind(new IPEndPoint(IPAddress.Any, Port));
           Server.serverSocket.Listen(999);

           Console.WriteLine(".:|_serVerYork_|:.");
           server.Start();
       }
   }
}



SERVER.CS
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace
{
   class Server
   {
       public static Socket serverSocket, clientSocket;
       private byte[] buffer;

       public void Start()
       {
           clientSocket = serverSocket.Accept();
           buffer = new byte[clientSocket.ReceiveBufferSize];
           while (clientSocket.Available == 0)
           {
               receiveData();
           }
       }

       private void receiveData()
       {
               try
               {
                   int received = clientSocket.Receive(buffer);
                   if (received != 0)
                   {
                       Array.Resize(ref buffer, received);
                       string receivedMsg = UTF8Encoding.UTF8.GetString(buffer);
                       Array.Resize(ref buffer, clientSocket.ReceiveBufferSize);
                       if(receivedMsg.Contains("policy-file-request"))
                       {
                           if(Clients.OrganizarClientes(Convert.ToString(clientSocket.LocalEndPoint)))
                           {
                               sendMsg("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"8888\" /></cross-domain-policy>");
                               clientSocket.Close();
                               Start();
                           } else {
                               Console.WriteLine("Nuevo cliente: " + clientSocket.LocalEndPoint);
                               sendMsg("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"8888\" /></cross-domain-policy>");
                               clientSocket.Close();
                               Start();
                           }
                       } else {
                           Console.WriteLine("Cliente_" + clientSocket.LocalEndPoint + ": " + receivedMsg);
                           Messages.Messages.ClasificarMsg(receivedMsg);
                           Start();
                       }
                   } else { return; }
               } catch (Exception ex){}
           
           receiveData();
       }

       public static void sendMsg(string data)
       {
           clientSocket.Send(UTF8Encoding.UTF8.GetBytes(data));
           
       }
   }
}

// RESPONDO EL XML YA QUE EL SOCKET AS3 NECESITA EL ARCHIVO XML PARA PASAR POR EL PUERTO Y/O DOMINIO ASIGNADO EN EL XML...


CLIENTS.CS
using System;
using System.Collections.Generic;

namespace
{
   public class Clients
   {
       public static bool OrganizarClientes(string data)
       {
           string[] tmpStr = data.Split(':');
           List<string> tmpList = new List<string>();
           bool tmpBool = false;
           try
           {
               for (int i = 0; i < Program.ClientsOnline.Length; i++)
               {
                   tmpList.Add(Program.ClientsOnline[i]);
                   if (!(Program.ClientsOnline[i] == tmpStr[0])){ tmpBool = false; } else { tmpBool = true; break; }
               }
           }catch(Exception ex) { tmpBool = false; }
           if (tmpBool)
           {
               return true;
           }else { tmpList.Add(tmpStr[0]); Program.ClientsOnline = tmpList.ToArray(); return false; }
       }
   }
}



MESSAGES.CS
using System;

namespace
{
   class Messages
   {
       public static void ClasificarMsg(string data)
       {
           switch (data)
           {
               case ("Conexión establecida"):
                   Server.sendMsg("GoToLogin");
                   Console.WriteLine("Server: " + "GoToLogin");
                   break;

                //else else...
           }
       }
   }
}



CLIENTE AS3:

var newSocket:Socket; // <- El tipo de Socket en AS3
newSocket = new Socket("IP", 8888);
newSocket.addEvent....
....


Quisiera saber que me recomendarían para este tipo de proyectos! Se acepta cualquier sugerencia... Saludos!


· Tema movido C# no es parte de C/C++, es .NET
>aquí las reglas del foro
-Engel Lex