2012-03-13 13 views
1

基本的なネットワークプログラミングを始めました。tcp/ipパケットリスナー

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

しかし、現在取り組んでいるアプリケーションは、少し違って動作します。

接続することなくtcp/ipパケットをリッスンするプログラムを設定する必要があります。

たとえば、パケット送信アプリケーションが適切なIPアドレスとポート番号を使用してプログラムにパケットを送信するようにします。

Sharppcapとpacket.netを使って調べましたが、私が見つけた例はすべて、ローカルにあるデバイス(ポート番号やIPアドレスなどのパラメータを設定する機会はありません)だけです。

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

+1

あなたがここに解決するために、正確に何をしようとしていますか?問題の内容は不明です。あなたは「接続する必要はありません」と言っていますが、接続したくないものについては説明しません。何とかリモートデバイスを聴くことができると期待していますか? – Oded

+0

UdpClientとUdpListnerを見ましたか? UDPはコネクションレスプロトコルです。 –

+0

@Oded、はい私は自分のプログラムにip/tcpパケットを送信しているデバイスを持っています。したがって、tcpclient/serverの場合と同様に、リスナーへの接続はありません。私はUdpを見てきました。私の問題はそれが信頼できないということです。私はこれらのパケットが私のプログラムに到達することを確認する必要があり、udpでは肯定応答はありません。 – Rick

答えて

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

質問はCではなくC#でタグ付けされているので、コード例はOPに役立たないでしょう。 – Oded

+0

言語をC#@Odedに変更しました。 –

+1

このプロジェクトを見てください。http://www.codeproject.com/Articles/2614/Testing-TCP-and-UDP-socket-servers-using-C- and-NET @rick –

関連する問題