我正在创建一个服务器 - 客户端应用程序,并且我在c#中使用Windows窗体应用程序来执行此操作。
我的问题来自客户端,我有很多表单(视图),我需要在切换视图(窗口)时保持与服务器的连接。我创建了一个类来保存全局变量,但是连接我不知道如何维护。我正在使用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();
,但是当我切换视图时,我失去了连接。有什么提示吗?
答案 0 :(得分:0)
我能够做我想做的事。我创建了另一个处理连接的Static类,所有其他视图只要他们需要来自服务器的东西就会询问该类。这样我只需要有1个连接,并且我的应用程序上的所有其他视图都将数据发送到该类,然后该类直接与服务器通信。