écouteur de paquets TCP/IP
-
13-12-2019 - |
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 ?
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();
}