elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1]
1  Programación / .NET (C#, VB.NET, ASP) / Servidor socket TCP C# en: 24 Julio 2017, 22:46 pm
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
Código:
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
Código:
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
Código:
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
Código:
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:
Código:
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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines