Question

J'ai commencé à faire de la programmation réseau de base.

J'ai lu/écrit mes propres programmes en utilisant TcpClient et TcpListener et cela a bien fonctionné.

Cependant, l'application sur laquelle je travaille fonctionne désormais un peu différemment.

Je souhaite configurer un programme qui écoute les paquets TCP/IP sans avoir à me connecter.

Par exemple, demandez à une application d'envoi de paquets d'envoyer un paquet à mon programme avec l'adresse IP et le numéro de port appropriés.

J'ai également envisagé d'utiliser Sharppcap et packet.net, mais tous les exemples que j'ai trouvés n'écoutent que sur les appareils trouvés localement (aucune possibilité de définir des paramètres tels que le numéro de port et l'ajout d'adresse IP).

Quelqu'un a-t-il une suggestion sur la façon de procéder ?

Était-ce utile?

La solution

Vous devriez envisager d'utiliser le protocole UDP au lieu de TCP/IP.

http://en.wikipedia.org/wiki/User_Datagram_Protocol

Voici le code pour le client :

using System.Net;
using System.Net.Sockets;

...

/// <summary>
/// Sends a sepcified number of UDP packets to a host or IP Address.
/// </summary>
/// <param name="hostNameOrAddress">The host name or an IP Address to which the UDP packets will be sent.</param>
/// <param name="destinationPort">The destination port to which the UDP packets will be sent.</param>
/// <param name="data">The data to send in the UDP packet.</param>
/// <param name="count">The number of UDP packets to send.</param>
public static void SendUDPPacket(string hostNameOrAddress, int destinationPort, string data, int count)
{
    // Validate the destination port number
    if (destinationPort < 1 || destinationPort > 65535)
        throw new ArgumentOutOfRangeException("destinationPort", "Parameter destinationPort must be between 1 and 65,535.");

    // Resolve the host name to an IP Address
    IPAddress[] ipAddresses = Dns.GetHostAddresses(hostNameOrAddress);
    if (ipAddresses.Length == 0)
        throw new ArgumentException("Host name or address could not be resolved.", "hostNameOrAddress");

    // Use the first IP Address in the list
    IPAddress destination = ipAddresses[0];            
    IPEndPoint endPoint = new IPEndPoint(destination, destinationPort);
    byte[] buffer = Encoding.ASCII.GetBytes(data);

    // Send the packets
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);           
    for(int i = 0; i < count; i++)
        socket.SendTo(buffer, endPoint);
    socket.Close();            
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top