doublons possibles:UDP Response ou Receiving a response through UDPEnvoi paquet UDP vers le serveur et obtenir une réponse
J'ai écrit une configuration client-serveur udp au cours du dernier mois et avoir un serveur de travail. Ce serveur est destiné à être un programme de communication pour récupérer des données sur l'ordinateur sur lequel il a été hébergé, sur demande d'un ordinateur client distant. L'idée générale est décrit ci-dessous:
client ->demandes de données -> Serveur -> processus demander ->envoie une réponse -> Client
Et le client reçoit le données et fait ce dont il a besoin avec ces données.
Je suis capable de tout faire dans ce plan, sauf si le client reçoit les paquets et les envoie à ma console de test. Si vous voulez voir la classe UdpServer, c'est simple, mais faites juste un commentaire et je l'afficherai ici dans une édition.
Voilà comment je reçois des données (application de test):
exécute: "test.exe index de tableau < >", par exemple « Test.exe 4 » -> contre exécute 204.229.219.35
public class Program {
static void Main(String[] args) {
string pre = "204.229.219";
string[] servers = {
"31", "32", "33", "34", "35", "36",
"37", "38", "39", "40", "41", "42",
"88", "89"
};
if (args.Length < 1)
{
Environment.Exit(1);
}
int idx = Int32.Parse(args[0]);
Console.Title = "UDPSERVERTEST";
UdpClient c = new UdpClient();
Byte[] data = Encoding.ASCII.GetBytes("net user");
IPEndPoint ep = new IPEndPoint(Dns.GetHostEntry(String.Format("{0}.{1}", pre, servers[idx])).AddressList[0], 8915);
Console.WriteLine("\tQuerying: {0}", String.Format("{0}.{1}", pre, servers[idx]));
c.Send(data, data.Length, ep);
UdpState s = new UdpState();
s.endPoint = new IPEndPoint(IPAddress.Any, 0);
s.host = c;
s.encoding = Encoding.ASCII;
ReceiveCallback(s);
Console.ReadKey(true);
}
private static void ReceiveCallback(UdpState s)
{
byte[] data = s.host.Receive(ref s.endPoint);
Console.WriteLine("Data received from ({0}) -> {1}", s.endPoint.ToString(), s.encoding.GetString(data));
}
private static void callback(IAsyncResult ar)
{
UdpState s = (UdpState)ar.AsyncState;
UdpClient u = s.host;
IPEndPoint e = s.endPoint;
byte[] data = u.EndReceive(ar, ref e);
}
}
Sur l'une de mes méthodes de réception, je reçois une erreur comme ce qui suit:
Une connexion existante a été fermée par la force la hôte distant
Merci Stackoverflow!
Cette erreur indique généralement que le port n'est pas accessible sur le serveur, avez-vous vérifié le pare-feu pour vous assurer qu'il autorise les connexions entrantes? – Rory
Je l'ai fait sur les deux mêmes machines pour le mois dernier et pour le moment je suis juste un peu distant (en pensée) pour comprendre comment recevoir des paquets de réponse à partir d'un serveur que je interroge. – Zack