2016-07-28 70 views
0

我已經創建了一個Windows服務,它將打開端口並記錄文本文件中的數據。它是異步數據通信允許連接多個客戶端。但我的問題是它不會創建任何日誌文件以及它不記錄任何data.kindly指導我在哪裏我做錯了? 這裏是我的代碼...Tcp Windows服務不創建任何日誌文件

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

所以,當你調試代碼,怎麼了?因爲我假設你已經對它進行了調試,找出它爲什麼不創建你的日誌文件。 –

+0

對不起,我錯過了...當我調試上述代碼它正在創建文件,但不記錄數據... –

+0

如何處理空異常? 「catch(Exception ex){...}」可能是這裏的東西... – 2016-07-28 08:22:25

回答

0

現在用下面的代碼,任何東西都工作正常

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); 
      } 

謝謝你們....

+0

else分支相當困惑。它也行不通。使用(StreamWriter writer = new StreamWriter(filepath,true)) writer.WriteLine(Message); 「你是需要的。根本沒有'如果'。或者,'File.AppendText(...)'。 – usr