1

私はいくつかの基本的なネットワークプログラミングを始めました。

TcpClientandを使用して自分のプログラムを読み書きTcpListenerしましたが、それはうまくいきました。

ただし、現在取り組んでいるアプリケーションの動作は少し異なります。

接続せずに tcp/ip パケットをリッスンするプログラムをセットアップしたいと考えています。

たとえば、パケット送信アプリに、適切な ip add とポート番号を使用してプログラムにパケットを送信させます。

Sharppcap と packet.net の使用も調べましたが、見つかったすべての例は、ローカルで見つかったデバイスでしかリッスンしていません (ポート番号や ip add などのパラメーターを設定する機会はありません)。

これを行う方法について誰か提案がありますか?

4

1 に答える 1

2

TCP/IP の代わりに UDP プロトコルの使用を検討する必要があります。

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();            
}
于 2012-03-13T19:23:47.673 に答える