2016-12-22 5 views
-3

Потому что у меня нет опыта работы с сокетами, и я не знаю, как сделать один, у меня есть этот код:Как я могу ввести код?

public void getGameInfo() 
{ 
    string content; 
    do 
    { 
      WebClient client = new WebClient(); 
      client.DownloadFile(fileadress, filename); 
      client.Dispose(); 
      StreamReader reader = new StreamReader(filename); 
      content = reader.ReadToEnd(); 
      reader.Close(); 
    } while (content == ""); 
    File.Delete(filename); 
    string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries); 
    mode = zeilen[0]; 
    gameInfo = new string[line.Length-1]; 
    Array.Copy(lines, 1, gameInfo, 0, lines.Length-1); 
} 

Он соединяется с сервером Apache с помощью файла .txt и читает его. Но если слишком много программ (три) используют код, он будет генерировать WebException. Итак, есть ли способ улучшить это, или руководство по созданию сокета для этого?

Редактировать 1: И что, если я хочу написать в файл, как эта функция?

public void setSpielInfo(int line, string input) 
{ 
    WebClient client = new WebClient(); 
    string content; 
    do 
    { 
     client.DownloadFile(gameadress, filename); 
     StreamReader reader = new StreamReader(filename); 
     content = reader.ReadToEnd(); 
     reader.Close(); 
    } while (content == ""); 

    string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries); 
    lines[zeile+1] = input; 
    byte[] bytearray = Encoding.ASCII.GetBytes(string.Join(Environment.NewLine, lines)); // I've read that byte arrays are faster than string arrays 

    FileStream writer = new FileStream(filename, FileMode.Truncate); 
    writer.Write(bytearray, 0, bytearray.Length); 
    writer.Close(); 

    client.UploadFile(ftpAdress, filename); 
    client.Dispose(); 
    File.Delete(filename); 
} 
+3

Я бы порекомендовал вам http://codereview.stackexchange.com/ –

ответ

1

Вы хотите прочитать string, справа? Так почему вы загружаете файл?

string content; 

    // Do not dispose explicitly, wrap into using instead 
    using (WebClient client = new WebClient()) { 
    content = client.DownloadString(fileadress); 
    } 

    string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries); 

    mode = lines.FirstOrDefault(); // 1st line 
    gameInfo = lines.Skip(1).ToArray(); // all the others 

Вы можете дополнительно сократить код в

using (WebClient client = new WebClient()) { 
    var lines = client 
     .DownloadString(fileadress) 
     .Split(separator, StringSplitOptions.RemoveEmptyEntries); 

    mode = lines.FirstOrDefault(); 
    gameInfo = lines.Skip(1).ToArray(); 
    } 

Edit: снова, что вы на самом деле хотите выполнить: скачать string, запись в файл, загрузить файл:

string content; 

    // Do not dispose explicitly, wrap into using instead 
    using (WebClient client = new WebClient()) { 
    // Download string (text) 
    content = client.DownloadString(fileadress); 
    // Write the text to file (override existing if it is) 
    File.WriteAllText(filename, content); 
    // Upload file 
    // think on uploading the string - client.UploadString(ftpAdress, content); 
    client.UploadFile(ftpAdress, filename); 
    } 

    string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries); 

    mode = lines.FirstOrDefault(); // 1st line 
    gameInfo = lines.Skip(1).ToArray(); // all the others 

В качестве дальнейшего улучшения следует думать о работе с string нет файлов:

using (WebClient client = new WebClient()) { 
    // Download string (text) 
    content = client.DownloadString(fileadress); 
    client.UploadString(ftpAdress, content); 
    }