2012-03-25 18 views
1

をDGRAMを送信することはできません:)は、私は助けを必要とする外部IPに

を、私はうまくいけば、誰かがここで私を助けることができる、Google検索のoをトンを行われ、何の答えを見つけていない:)

をので、私は簡単なP2Pのビデオを足すいますチャットクライアントは、テキストボックスからIPを作成し、ポート5096の「その他」に接続します。したがって、外部IPに接続しようとすると問題が発生します。リスナーはパッケージを受け取ることはありません。画像を転送することはできません。誰か助けてくれますか?

これは私のUdpPictureSenderのコードです:

class UDPPictureSender 
    { 
     bool closedSender = false; 
     Socket sending_socket; 
     IPAddress send_to_address; 
     IPEndPoint sending_end_point; 
     MemoryStream imageMemoryStream; 


     public UDPPictureSender() 
     { 
      initializeUdpPictureSender(); 

     } 

     public void initializeUdpPictureSender() 
     { 
      sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
      send_to_address = IPAddress.Parse(ConnectionSettings.ipAdress); 
      sending_end_point = new IPEndPoint(send_to_address, 5096); 
     } 

     public void sendImage(Image image) 
     { 
      if (closedSender) 
      { 
       initializeUdpPictureSender(); 
      } 

      imageMemoryStream = new MemoryStream(); 
      image.Save(imageMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
      Byte[] bytes = imageMemoryStream.GetBuffer(); 
      sending_socket.SendTo(bytes, sending_end_point); 
      imageMemoryStream.Flush(); 
     } 

     public void closeConnection() 
     { 
      sending_socket.Close(); 
      send_to_address = null; 
      sending_end_point = null; 
      closedSender = true; 
     } 
    } 

これはUDPListenerのコードです:

class UDPListener 
    { 
     private const int listenPort = 5096; 
     bool done = false; 
     bool stoped = false; 

     UdpClient listener; 
     IPEndPoint groupEP; 
     Image received_data; 
     byte [] receive_byte_array; 
     MemoryStream currentMemoryStream; 

     public UDPListener() 
     { 
      startupSettings(); 
     } 

     public void startupSettings() 
     { 
      groupEP = new IPEndPoint(IPAddress.Any, listenPort); 
      listener = new UdpClient(listenPort); 
     } 
     public Image listenForImages() 
     { 
      if (stoped) 
      { 
       startupSettings(); 
       stoped = false; 
      } 
      try 
      { 
       while (!done) 
       { 

        receive_byte_array = listener.Receive(ref groupEP); 
        currentMemoryStream = new MemoryStream(receive_byte_array); 
        received_data = Image.FromStream(currentMemoryStream); 
        return received_data; 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 
      listener.Close(); 
      return null; 
     } 

     public void closeConnection() 
     { 
      listener.Close(); 
      stoped = true; 
     } 
    } 

誰も私を助けることができますか? ConnectionSettings.ipAdressが有効なIPv4またはIPv6アドレスではないため、例外がIPAddress.Parseからスローされていることを事前

答えて

2

感謝。

これまで使用していたものは有効なIPアドレスではありません。おそらくあなたには埋め込まれたスペースなどがあります。

+0

私はそれをチェックし、trim()を使用しました。 – hrza

+0

@hrza何が分かりにくいですか? IPAddress.Parseに無効なアドレス(可能)を渡します。 '無効なIPアドレスが指定されました.'あなたのコードをチェックし、何が通過したかを見てください。 –

+0

私は解析すべき文字列の例を教えていただけますか? – hrza

0

データ送信コードで、データを数回送信してみます。最初のインスタンスでは、受信側でデータを受信する必要はありません。 UDPではなくTCPであるため、配信を確実にするメカニズムがない限り、配信はほとんど保証されません。バッファサイズが固定されていることを確認し、イメージ全体をチャンクで送信してみてください。

関連する問題