2013-11-25 2 views
-1

У меня есть фрагмент кода, который считывает данные из ip-адреса и порта. Теперь, согласно моей потребности, мне нужно сохранить эти данные в текстовый файл, но я не знаю, как это сделать ..Как написать данные Socket в текстовый файл в C#

Вот мой код ...

class Listener 
{ 

    private TcpListener tcpListener; 
    private Thread listenThread; 
    // Set the TcpListener on port 8081. 
    Int32 port = 8081; 
    IPAddress localAddr = IPAddress.Parse("192.168.1.3"); 
    Byte[] bytes = new Byte[256]; 


    private void ListenForClients() 
    { 

     this.tcpListener.Start(); 

     while (true) 
     { 
      //blocks until a client has connected to the server 
      TcpClient client = this.tcpListener.AcceptTcpClient(); 

      //create a thread to handle communication 
      //with connected client 
      Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm)); 
      clientThread.Start(client); 
     } 
    } 
    private void HandleClientComm(object client) 
    { 
     TcpClient tcpClient = (TcpClient)client; 
     NetworkStream clientStream = tcpClient.GetStream(); 

     byte[] message = new byte[4096]; 
     int bytesRead; 

     while (true) 
     { 
      bytesRead = 0; 

      try 
      { 
       //blocks until a client sends a message 
       bytesRead = clientStream.Read(message, 0, 4096); 
      } 
      catch 
      { 
       //a socket error has occured 
       // System.Windows.MessageBox.Show("socket"); 
       break; 
      } 

      if (bytesRead == 0) 
      { 
       //the client has disconnected from the server 
       // System.Windows.MessageBox.Show("disc"); 
       break; 
      } 

      //message has successfully been received 
      ASCIIEncoding encoder = new ASCIIEncoding(); 

      //Here i need to save the data into text file ... 

     } 

     tcpClient.Close(); 
    } 
} 

И мой адрес текстовый файл ...

D:\ipdata.txt 

Пожалуйста, помогите мне .. заранее спасибо ..

+0

Вы изучали класс 'FileStream'? –

+0

Используйте 'StreamReader' и' StreamWriter' для преобразования байтов в текст и наоборот, и 'FileStream', чтобы сохранить его в файле –

+1

возможный дубликат [Сохранить файл из байта \ [\] в C# NET 3.5] (http://stackoverflow.com/questions/733832/save-file-from-a-byte-in-c-sharp-net-3-5) – CodeCaster

ответ

0

Вы можете создать FileStream с помощью File.Open() или File.OpenWrite():

using (Stream output = File.OpenWrite(@"D:\ipdata.txt")) 
{ 
    // the while loop goes in here 
} 

Вы намекаете использование ASCIIEncoding. Обычно, если вы получаете ASCII вам не нужно декодировать данные - можно просто записать данные в файл непосредственно:

if (bytesRead == 0) 
{ 
    break; 
} 
else 
{ 
    output.Write(message, 0, bytesRead); 
} 

Если какая-то декодирование должно иметь место, вам может понадобиться для буферизации входящего данных и либо написать всю вещь после разъединения сокета, либо записать их партиями. Например, если вы ожидаете UTF-16, нет гарантии, что вы получите четное количество байтов на каждом Read().

PS Ни один из кода не проверен, он должен быть просто примером.

Смежные вопросы