2013-10-04 1 views
0

Я никогда не писал приложение, поэтому я выложу весь код (80 строк). (Я исхожу из предпосылки создания сценариев.)Выбор порта и приложение пакетного запуска

Моя цель - загрузить или создать список «используемых» портов, выбрать число в пределах диапазона, которого нет в списке, и если сумма попыток достичь неиспользуемого порта достигает 129, чтобы запустить пакетный файл Windows.

Это также превратит выбранный порт в CMD-

(некоторые это объединение источников от SO)

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Linq; 
using System.Diagnostics; 
using System.IO; 
namespace randomport 
{ 
    class Core 
    { 
     public const int 
      minval = 8001, 
      maxval = 8128; 
     public static int[] usedPorts = new int[]{}; 
     public static int 
      chosenPort = 0, 
      tries = 0, 
      timeout = 10; 
     public static bool read = false; 
     public static void Main() 
     { 
      if(!read) 
      { 
       Read(); 
       read = true; 
      } 
      RandGen(); 
     } 
     public static void RandGen() 
     { 
      Process proc = null; 
      Random rand = new Random(); 
      if(tries < 129) chosenPort = rand.Next(minval, maxval); 
      else 
      { 
       proc.StartInfo.FileName     = @"C:\Users\Administrator\Desktop\TerrariaServer\filebin\sendservfull.bat"; 
       proc.StartInfo.RedirectStandardError = true; 
       proc.StartInfo.RedirectStandardOutput = true; 
       proc.StartInfo.UseShellExecute   = false; 

       proc.Start(); 

       proc.WaitForExit 
        (
         (timeout <= 0) 
         ? int.MaxValue : timeout * 100 * 60 
        ); 
      } 
      for(int i = 0; i < usedPorts.Length; i++) 
      { 
       if(chosenPort != usedPorts[i]) 
       { 
        Write(); 
       // Application.Exit(); 
       } 
       else 
       { 
        tries += 1; 
        return; 
       } 
      } 
     } 
     public static void Read() 
     { 
      using (StreamReader sr = new StreamReader(@"C:\Users\Administrator\Desktop\TerrariaServer\filebin\activeports.txt")) 
      { 
       string[] values = sr.ReadToEnd().Split(';'); 
       for(int i = 0; i < values.Length; i++) 
       { 
        int.TryParse(values[i], out usedPorts[i]); 
       } 
      } 
     } 
     public static void Write() 
     { 
      File.AppendAllText(@"C:\Users\Administrator\Desktop\TerrariaServer\filebin\activeports.txt", "set port="+chosenPort+";"); 
      File.Move(@"C:\Users\Administrator\Desktop\TerrariaServer\filebin\activeports.txt", Path.ChangeExtension(@"C:\Users\Administrator\Desktop\TerrariaServer\filebin\activeports.txt", ".cmd")); 
     } 
    } 
} 

У меня есть небольшая работа, чтобы сделать на конечный экспорт (как удаление ";").

Сценарий компилируется, но не работает по назначению. Что-то определенно неправильно, но я не знаю об этом. Если это что-то очевидное, я думаю, это было бы удобно, иначе, если это просто формат и т. Д., Мне явно нужно немного поучиться.

+0

Каков ваш вопрос? Очевидно, что ваш код сработает, но в чем вопрос? –

+0

Я предполагаю, что я должен сделать больше поиска Google при написании кода функционирования - мой вопрос очень смутен D: – DaFuze

+1

Я бы настоятельно рекомендовал вам не использовать Google, чтобы научиться писать код. Пойдите, прочитайте книгу. Кроме того, FYI, это не сценарий - это программа. Есть большая разница, которую вы еще не узнали. Вам будет трудно написать приличную программу, используя тот же самый процесс мышления, который вы использовали бы для создания сценария. –

ответ

0

Скомпилированный с использованием visual studio 2008 выразить на этот раз и очистил его. Трудно было сказать, какие были проблемы без отладчика, такие как отсутствующая скобка.

Запись файлов, компиляции и грохот решена ..

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Linq; 
using System.Diagnostics; 
using System.IO; 
namespace randomport 
{ 
    class Core 
    { 
     public static int[] usedPorts = new int[] { }; 
     public static int 
      minval = 8001, 
      maxval = 8129, 
      chosenPort = 0, 
      timeout = 10, 
      temp = 1024; 
     public static bool read = false; 
     public static void Main(string[] args) 
     { 
      string path = System.Environment.GetEnvironmentVariable("USERPROFILE"); 
      if (!Directory.Exists(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt"))) 
      { 
       Directory.CreateDirectory(String.Concat(path, "\\desktop\\TerrariaServer\\filebin")); 
       // using (StreamWriter sw = File.CreateText(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt"))) { } 
      } 
      if (!Directory.Exists(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\chosenport.cmd"))) 
      { 
       Directory.CreateDirectory(String.Concat(path, "\\desktop\\TerrariaServer\\filebin")); 
       using (StreamWriter sw = File.CreateText(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\chosenport.cmd"))) { } 
      } 
      if (args.Length > 0) 
      { 
       if (args[0] == "-noread") 
       { 
       } 
       else if (args[0] == "-read" || args[0] == "-default") 
       { 
        if (!read) 
        { 
         Read(); 
         read = true; 
        } 
       } 
      } 
      else 
      { 
       if (!read) 
       { 
        Read(); 
        read = true; 
       } 
      } 
      if (args.Length >= 3) 
      { 
       if (args[1] != "-default" || args[1] != "0") 
       { 
        int.TryParse(args[1], out temp); 
        if (temp > 1024 && temp < 65535) 
        { 
         minval = temp; 
        } 
       } 
       if (args[2] != "-default" || args[2] != "0") 
       { 
        int.TryParse(args[2], out temp); 
        if (temp > 1024 && temp < 65535) 
        { 
         maxval = temp; 
        } 
       } 
      } 
      RandGen(); 
     } 
     public static void RandGen() 
     { 
      string path = System.Environment.GetEnvironmentVariable("USERPROFILE"); 
      Random rand = new Random(); 
      chosenPort = rand.Next(minval, maxval); 
      for (int i = 0; i < usedPorts.Length; i++) 
      { 
       if (chosenPort != usedPorts[i]) 
       { 
        Write(); 
       } 
       else return; 
      } 
     } 
     public static void Read() 
     { 
      string path = System.Environment.GetEnvironmentVariable("USERPROFILE"); 
      if (!File.Exists(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt"))) 
      { 
       File.Create(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt")); 
      } 
      using (StreamReader sr = new StreamReader(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt"))) 
      { 
       string[] values = sr.ReadToEnd().Split(';'); 
       usedPorts = new int[values.Length];//Initialize the array with the same length as values 
       for (int i = 0; i < values.Length; i++) 
       { 
        int.TryParse(values[i], out usedPorts[i]); 
       } 
      } 
     } 
     public static void Write() 
     { 
      string path = System.Environment.GetEnvironmentVariable("USERPROFILE"); 
      File.AppendAllLines(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\activeports.txt"), new string[] { chosenPort + ";" }); 
      using (StreamWriter sw2 = File.CreateText(String.Concat(path, "\\desktop\\TerrariaServer\\filebin\\chosenport.cmd"))) 
      { 
       sw2.WriteLine("set port=" + chosenPort); 
      } 
      Environment.Exit(0); 
     } 
    } 
} 
Смежные вопросы