2012-03-13 4 views
1

Я начал выполнять базовое сетевое программирование.tcp/ip packet прослушиватель

Я прочитал/написал свои собственные программы, используя TcpClient и TcpListener, и это сработало нормально.

Однако приложение, над которым я сейчас работаю, работает по-другому.

Я хочу настроить программу, которая прослушивает пакеты tcp/ip без необходимости подключения.

Например, отправьте приложение для отправки пакетов в мою программу с соответствующим номером ip и номером порта.

Я также изучил использование Sharppcap и packet.net, но все примеры, которые я нашел, только слушают устройства, найденные локально (нет возможности устанавливать такие параметры, как номер порта и ip add).

Есть ли у кого-нибудь предложение о том, как это сделать?

+1

Что именно вы пытаетесь решить здесь? Пока неясно, в чем проблема. Вы говорите «без подключения», но не объясняете, чего вы ожидаете от него, чтобы не подключаться. Вы ожидаете, что сможете каким-то образом прослушать удаленное устройство? – Oded

+0

Вы посмотрели UdpClient и UdpListner? UDP - протокол без подключения. –

+0

@Однако, да, у меня есть устройство, передающее пакеты ip/tcp в мою программу. Поэтому нет связи с слушателем, как с tcpclient/server. Я изучил Udp, моя проблема в том, что это не так надежно. Мне нужно убедиться, что эти пакеты попадают в мою программу, а с udp нет никакой информации. – Rick

ответ

2

Вы должны посмотреть на использование протокола UDP вместо TCP/IP.

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

Вот код клиента:

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();    
} 
+0

Вопрос отмечен C#, а не C, поэтому ваш пример кода не будет полезным для OP. – Oded

+0

Я меняю язык на C# @Oded –

+1

Вы также должны взглянуть на этот проект: http://www.codeproject.com/Articles/2614/Testing-TCP-and-UDP-socket-servers-using-C- и-NET @rick –