2016-07-28 33 views
0

Ich habe einen Windows-Dienst erstellt, der den Port öffnen und protokolliert die Daten in Textdatei.Es ist asynchrone Datenkommunikation ermöglichen, mehrere Clients zu verbinden.Aber mein Problem ist, es erstellt keine Log-Datei als auch es protokolliert keine Daten. Wohin führen Sie mich, wo ich falsch mache ??? hier ist mein Code ...Tcp Windows-Dienst erstellt keine Protokolldatei

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.Net; 
using System.Net.Sockets; 
using System.ServiceProcess; 
using System.Text; 
using System.Threading.Tasks; 
using System.Configuration; 
using System.IO; 

namespace TcpService 
{ 
    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      SetupServer(); 
     } 

     public void OnDebug() 
     { 
      OnStart(null); 
     } 

     protected override void OnStop() 
     { 
      Service1._serverSocket = null; 
     } 

     private static byte[] _buffer = new byte[1024]; 
     private static List<Socket> _ClientSockets = new List<Socket>(); 
     private static int port = 10000; 
     private static IPAddress iparr = IPAddress.Parse("192.168.1.12"); 
     private static Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     private static void SetupServer() 
     { 
      //Console.WriteLine("Setting Up server"); 
      _serverSocket.Bind(new IPEndPoint(iparr, port)); 
      _serverSocket.Listen(100); 
      _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); 
     } 

     private static void AcceptCallback(IAsyncResult AR) 
     { 
      Socket socket = _serverSocket.EndAccept(AR); 
      _ClientSockets.Add(socket); 
      //Console.WriteLine("Client Connected"); 
      socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); 
      _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); 
     } 

     private static void ReceiveCallback(IAsyncResult AR) 
     { 
      try 
      { 
       SocketError errorCode; 
       Socket socket = (Socket)AR.AsyncState; 
       int received = socket.EndReceive(AR, out errorCode); 
       if (errorCode != SocketError.Success) 
       { 
        received = 0; 
       } 

       byte[] databuf = new byte[received]; 
       Array.Copy(_buffer, databuf, received); 
       string text = BitConverter.ToString(databuf); 
       string time = DateTime.Now.TimeOfDay.ToString(); 
       string dataline = time + "____" + text; 
       AddtoLogFile(dataline); 
       socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 

     private static void AddtoLogFile(string Message) 
     { 
      string LogPath = @"D:\\Logfile\\"; 
      string filename = "Log_" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt"; 
      string filepath = LogPath + filename; 
      if (File.Exists(filepath)) 
      { 
       using (StreamWriter writer = new StreamWriter(filepath, true)) 
       { 
        writer.WriteLine(Message); 
       } 
      } 
      else 
      { 
       StreamWriter writer = File.CreateText(filepath); 
       writer.WriteLine(Message); 
       writer.Close(); 
      } 
     } 
    } 
} 
+0

Also, wenn Sie diesen Code debuggen, was geschieht? Weil ich davon ausgehe, dass Sie es ausgepackt haben, um herauszufinden, warum es Ihre Logdatei nicht erstellt. –

+0

Tut mir leid, dass ich das verpasst habe ... Wenn ich den obigen Code debugge Es erstellt die Datei aber nicht die Daten protokollieren ... –

+0

Wie wäre es mit leeren Ausnahme? "catch (Exception ex) {...}" ist wahrscheinlich etwas hier ... –

Antwort

0

Jetzt mit dem Code unten ist Alles, was gut funktioniert

private static void AddtoLogFile(string Message) 
    { 
     string LogPath = @"D:\Logfile\"; 
     string filename = "Log_" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt"; 
     string filepath = LogPath + filename; 
     if (File.Exists(filepath)) 
     { 
      using (StreamWriter writer = new StreamWriter(filepath, true)) 
      { 
       writer.WriteLine(Message); 
      } 
     } 
     else 
     { 
      using (StreamWriter writer = new StreamWriter(filepath, false)) 
      { 
       using(StreamWriter writer1 = File.CreateText(filepath)) 
       { 
        if(File.Exists(filepath)) 
        { 
         writer.WriteLine(Message); 
        } 
       } 
       //StreamWriter writer1 = File.CreateText(filepath); 
       //writer.WriteLine(Message); 
      } 

euch danken ....

+0

Der Else-Zweig ist ziemlich verwirrt. Es funktioniert auch nicht. 'using (StreamWriter writer = neuer StreamWriter (filepath, true)) { writer.WriteLine (Nachricht); } 'ist alles was Sie brauchen. Kein 'wenn' überhaupt. Oder, 'File.AppendText (...)'. – usr