私はC#の使い方を知っていたので(あまり良くはありませんが、ある程度)、私の上司が質問をしてきて、外に出て購入するのではなく、単純なSyslogサーバーを構築できるかどうか尋ねました。もちろんチャレンジして街に出ました。私は Alpha を開発しました (アプリケーションがすべてをデータベースに直接入力するようにしました) が、彼はクライアント対リスナーのアプローチを行うことができるかどうか尋ねました (PIA ですが妥当です)。今、私は TCPClient が正しく構築されていると信じていますが、TCPlistener 部分で立ち往生しています。誰かが私を正しい方向に向けることができれば、助けが必要です。以下は、これまでに作成した 3 つのプログラムです (アルファ、クライアント、およびリスナーの一部)。
アルファ:
EventLog alog = new EventLog();
alog.Log = "Application";
alog.MachineName = ".";
DateTime fifteenMinsAgo = DateTime.Now.AddMinutes(-15);
foreach (EventLogEntry entry in alog.Entries)
{
if (entry.TimeGenerated > fifteenMinsAgo)
{
SqlConnection sql = new SqlConnection("Server=x.x.x.x;Database=yy;User ID=abcd;password=efg");
sql.Open();
SqlCommand cmd = new SqlCommand(@"insert into ApplicationLog(Level,DateTime,Source,EventID,TaskCategory,ServerName,Message) values (@Level,@DateTime,@Source,@EventID,@TaskCategory,@ServerName,@Message)", sql);
cmd.Parameters.AddWithValue("@Level", entry.EntryType);
cmd.Parameters.AddWithValue("@DateTime", entry.TimeGenerated);
cmd.Parameters.AddWithValue("@Source", entry.Source);
cmd.Parameters.AddWithValue("@EventID", entry.InstanceId);
cmd.Parameters.AddWithValue("@TaskCategory", entry.Category);
cmd.Parameters.AddWithValue("@ServerName", entry.MachineName);
cmd.Parameters.AddWithValue("@Message", entry.Message);
cmd.ExecuteNonQuery();
sql.Close();
}
}
TCP クライアント:
EventLog alog = new EventLog();
alog.Log = "Application";
alog.MachineName = ".";
DateTime fifteenMinsAgo = DateTime.Now.AddMinutes(-15);
foreach (EventLogEntry entry in alog.Entries)
{
if (entry.TimeGenerated > fifteenMinsAgo)
{
TcpClient client = new TcpClient();
IPEndPoint serverendpoint = new IPEndPoint(IPAddress.Parse("x.x.x.x"), yyyy);
client.Connect(serverendpoint);
NetworkStream clientstream = client.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes(entry.ToString());
clientstream.Write(buffer, 0, buffer.Length);
clientstream.Flush();
}
}
TCP リスナー:
TcpListener tcpServerListener = new TcpListener(IPAddress.Parse("127.0.0.1"), yyyy);
tcpServerListener.Start();
Console.WriteLine("Server Started");
Socket serverSocket = tcpServerListener.AcceptSocket();
if (serverSocket.Connected)
{
NetworkStream serverSockStream = new NetworkStream(serverSocket);
serverSockStream.ReadByte();
}