Глобальное сокет соединение

1

Я создаю приложение Server-Client, и для этого я использую приложения для форм Windows в С#. Моя проблема возникает у клиента, у меня много форм (Views), и мне нужно поддерживать соединение с сервером при переключении просмотров (окон). Я создал класс для хранения глобальных переменных, но соединение я понятия не имею, как поддерживать. Я использую TCP-сокеты, я вывешу свой класс globalVariables:

static class GlobalVariables
{
    public static Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    public static IPEndPoint newPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6000);
    public static int msgRec = 0;
    public static String msgConverted ="";
    public static byte[] data = new byte[1024];


    public static void receiveMsgFromServer()
    {
        msgRec = client.Receive(data); //metodo que retorna o numero de bytes da mensagem (recebe o array de bytes)
        msgConverted = Encoding.ASCII.GetString(data, 0, msgRec); //metodo que converte os bytes em string
        Microsoft.VisualBasic.Interaction.MsgBox(msgConverted);
    }

    public static void connect()
    {
        client.Connect(newPoint);
    }
  }
}


class MultiThreadedTcpServer
{
     static void Main(string[] args)
    {


        //Servidor TCP

        Socket newSocket = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//server
        IPEndPoint newPoint = new IPEndPoint(IPAddress.Any, 6000); //ponto de acesso no port 6000 para todos os endereços de IP da maquina
        newSocket.Bind(newPoint);//associar o ponto de acesso ao socket
        newSocket.Listen(10); 
        Console.WriteLine("Waiting..."); 

        //Cliente - definir o comportamente para com o cliente
        Socket client;
        sharedData counter = new sharedData(); // este objecto é passado por referencia para as outras classes logo estes olham todos para o mesmo
        while (true)
        {
            client = newSocket.Accept(); // socket usado para comunicar com o cliente (NAO É O CLIENTE !!!!!!)
            IPEndPoint remoteEndPoint = (IPEndPoint)client.RemoteEndPoint; // informacao sobre o ponto de acesso do cliente
            Console.WriteLine(remoteEndPoint +" " + "Connected"); // escreve esta linha na consola do programa para o admin saber que houve uma conexao

            //criar uma thread para cada novo cliente passando-lhe a respectiva ligacao remota
            ClientHandler clientHandler = new ClientHandler(client, remoteEndPoint, counter); //nos parametros passamos o socket do client e o endpoint do cliente
            counter.clientes.Add(client);
            Thread t = new Thread (new ThreadStart(clientHandler.clientProc));
            t.Start();
        }

    }
}

Извините за португальские комментарии. Цель состоит в том, чтобы многие клиенты подключались к одному серверу (вот почему у меня есть потоки), все работает нормально. Теперь моя проблема в том, что я загружаю GlobalVariables.Connect(); когда я запускаю свое клиентское приложение, но когда я переключаю представления, я теряю соединения. Какие-нибудь советы?

Теги:
winforms
sockets

1 ответ

0
Лучший ответ

Я смог сделать то, что хотел. Я создал еще один класс Static, который обрабатывает соединение, и все остальные представления просто спрашивают этот класс, когда им нужно что-то с сервера. Таким образом, мне нужно иметь только 1 соединение, а все остальные представления в моем приложении отправляют данные этому классу, а затем этот класс напрямую связывается с сервером.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню