2012-03-25 3 views
1

i Hilfe benötigen senden :)Kann nicht dgram an externe IP

I Tonnen o Google-Suche und fand keine Antwort getan haben, hoffentlich kann mir hier jemand helfen :)

Also, ich bin writting einfache P2P-Video Chat-Client, der IP aus Textfeld erstellt und eine Verbindung mit dem "anderen" auf Port 5096 herstellt. So beginnt Problem, wenn ich versuche, eine Verbindung zu externer IP herzustellen. Der Listener empfängt keine Pakete und ich kann mein Bild nicht übertragen. Kann mir bitte jemand helfen?

Dies ist Code meines 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; 
     } 
    } 

Dies ist der Code von 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; 
     } 
    } 

mir jemand helfen?

Vielen Dank im Voraus

Antwort

2

Diese Ausnahme von IPAddress.Parse geworfen wird, weil ConnectionSettings.ipAdress Adresse keine gültige IPv4 oder IPv6 ist.

Was immer Sie verwenden, ist keine gültige IP-Adresse. Vielleicht haben Sie einen eingebetteten Raum oder etwas ähnliches.

+0

Ich überprüft, verwendet Trim(), und immer noch nichts. – hrza

+0

@hrza was ist schwer zu verstehen? Sie übergeben eine ungültige Adresse (möglich) an IPAddress.Parse. 'Eine ungültige IP-Adresse wurde angegeben. Überprüfen Sie Ihren Code und sehen Sie, was übergeben wurde. –

+0

Können Sie mir ein Beispiel für eine Zeichenfolge geben, die ich parsen sollte? – hrza

0

Versuchen Sie in Ihrem Datenübertragungscode, die Daten einige Male zu senden. Es ist nicht notwendig, dass Sie die Daten auf der Empfängerseite empfangen. Seine UDP und nicht TCP, so dass Lieferung selten gewährleistet ist, es sei denn, Sie haben etwas von Mechanismus, um die Lieferung zu gewährleisten. Stellen Sie sicher, dass Sie eine feste Puffergröße haben, und versuchen Sie, das Bild in Chunks anstelle eines Ganzen zu senden.

Verwandte Themen