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ú

Temas - FanAdmin

#1
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