2011-11-15 18 views
4

I /私のアプリケーションへソケット通信のC#

public class SocketClient 
{ 
    Socket socket = null; 
    static ManualResetEvent clientDone = new ManualResetEvent(false); 
    const int TIMEOUT_MILLISECONDS = 5000; 
    const int MAX_BUFFER_SIZE = 2048; 

    public SocketClient() 
    { 
     socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
    } 

    public string Send(string serverName, int portNumber, string data) 
    { 
     string response = "Timeout"; 

     if (socket != null) 
     { 
      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
      socketEventArg.RemoteEndPoint = new DnsEndPoint(serverName, portNumber); 

      socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) 
      { 
       response = e.SocketError.ToString(); 
       clientDone.Set(); 
      }); 

      byte[] payload = Encoding.UTF8.GetBytes(data); 
      socketEventArg.SetBuffer(payload, 0, payload.Length); 
      clientDone.Reset(); 
      socket.SendToAsync(socketEventArg); 

      clientDone.WaitOne(TIMEOUT_MILLISECONDS); 
     } 
     else 
     { 
      response = "not initialized"; 
     } 
     return response; 
    } 

    public string Recieve(int portNumber) 
    { 
     string response = "Timeout"; 

     if (socket != null) 
     { 
      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
      socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); 

      socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) 
      { 
       if (e.SocketError == SocketError.Success) 
       { 
        response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); 
        response.Trim('\0'); 
       } 
       else 
       { 
        response = e.SocketError.ToString(); 
       } 

       clientDone.Set(); 
      }); 

      socketEventArg.RemoteEndPoint = new IPEndPoint(IPAddress.Any, portNumber); 

      clientDone.Reset(); 

      socket.ReceiveFromAsync(socketEventArg); 
      clientDone.WaitOne(TIMEOUT_MILLISECONDS); 
     } 

     return response; 
    } 

    public void Close() 
    { 
     socket.Close(); 
    } 
} 

からエコー検査を送信するために、このクラスを使用し、ここで私はそれを使用する方法ですしています:

 SocketClient client = new SocketClient(); 
     client.Send("192.168.1.2",77 , "besm ellah"); 
     textBox1.Text=client.Recieve(77); 

それは常に引数例外経由で未処理でしたsocket.SendToAsync(socketEventArg); "パラメータremoteEPの型がDnsEndPointであってはなりません。 「パラメータ名:remoteEP」

Windowsの機能では単純なTCP/IPの機能を有効にしましたが、機能しません。

-UPDATE-

私がなるようにコードを変更してみました:

IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); 
socketEventArg.RemoteEndPoint = new IPEndPoint(localIPs[3], portNumber); 

それが例外を与えるものではありませんが、メッセージが通過取得していません。

+0

を使用すべきだと思いますか?その例外の引数に何が間違っているかを教えてください。 – McKay

+0

@McKay、申し訳ありませんが修正されました。 – SKandeel

+0

エラーメッセージが表示されず、何も起こりません。 – McKay

答えて