2010-09-08 2 views
0

Je n'ai pas le travail fait en C/C++ pour un peu et je me demandais simplement si quelqu'un peut me aider avec le portage de cette .Net C# code en C++ en utilisant la bibliothèque Boost (Boost.Asio)Comment créer un analogue pour une telle fonction C# StreamProxyApplication en C++ en utilisant la bibliothèque Boost?

J'ai une fonction:

private const int bufferSize = 8192; 

/// <summary> 
/// The entry point of the application. 
/// </summary> 
/// <param name="args">The input arguments of the application. The first argument should be a valid http address of the source server. The second argument should be a valid http address of the destination server.</param> 
public static void Main(string[] args) 
{ 
    // Check the amount of the arguments. 
    if (args.Length < 2) 
    { 
     Console.Write("Not enough arguments. Expected 2, recieved " + args.Length + "."); 
     return; 
    } 

    // Try to get the source server URI. 
    Uri sourceUri; 
    try 
    { 
     sourceUri = new Uri(args[0]); 
    } 
    catch (UriFormatException) 
    { 
     Console.Write("Invalid source server address."); 
     return; 
    } 

    // Try to get the destination server URI. 
    Uri destinationUri; 
    try 
    { 
     destinationUri = new Uri(args[1]); 
    } 
    catch (UriFormatException) 
    { 
     Console.Write("Invalid destination server address."); 
     return; 
    } 

    // Try to connect to the source server. 
    Stream sourceStream; 
    try 
    { 
     sourceStream = WebRequest.Create(sourceUri).GetResponse().GetResponseStream(); 
    } 
    catch (Exception exception) 
    { 
     Console.Write("Cannot connect to the source server. Details: " + exception.Message); 
     return; 
    } 

    // Try to connect to the destination server. 
    NetworkStream destinationStream; 
    try 
    { 
     destinationStream = new TcpClient(destinationUri.Host, destinationUri.Port).GetStream(); 
    } 
    catch (Exception exception) 
    { 
     Console.Write("Cannot connect to the destination server. Details: " + exception.Message); 
     return; 
    } 

    // Start redirecting the data. 
    int read = 0; 
    byte[] buffer = new byte[bufferSize]; 
    do 
    { 
     try 
     { 
      read = sourceStream.Read(buffer, 0, bufferSize); 
     } 
     catch (Exception exception) 
     { 
      Console.Write("An error occurred while receiving data from the source server. Details: " + exception.Message); 
      return; 
     } 

     try 
     { 
      destinationStream.Write(buffer, 0, read); 
     } 
     catch (Exception exception) 
     { 
      Console.Write("An error occurred while sending data to the destination server. Details: " + exception.Message); 
      return; 
     } 
    } 
    while (read > 0); 

    Console.Write("All data redirected."); 
} 

Comment créer son simple \ général analogique en C++?

main L'idée ici est de transmettre des données de diffusion en direct d'une source broadcasticg à une autre.

Répondre

0

Je ne pense pas que ce soit simple à porter sur C++. Ce qui prend une ligne en C# nécessite tout un tas d'infrastructures en C++, car vous avez tout le framework .Net à portée de main dans le CLR. Je crois que boost :: asio est une interface de bas niveau dont vous avez besoin pour cela. Si vous devez le faire en C++ alors il y a des choses dans ATL Server ou WinHTTP qui pourraient s'avérer utiles.

Existe-t-il un moyen d'encapsuler le code d'ici dont vous avez besoin dans un petit assemblage C#, et de l'appeler à partir de C++ en utilisant COM interop?

+0

Je suis curieux de connaître la rétrogradation anonyme tardive d'une réponse acceptée. Vous voulez expliquer ce que vous n'avez pas aimé? –

Questions connexes