Ich habe eine C# -Konsolen-App erstellt, die TCP-Verbindungen von GPS-Berichtsgeräten akzeptiert, die ich habe. Ich habe diese App erstellt, um diese Daten zu sammeln und sie in eine SQL Server-Tabelle zu schreiben.Ich möchte Codeverbesserung für C# TCP-Listener zu SQL Server-Datenbank-App
Derzeit habe ich die Anwendung funktioniert, aber es hat einen Fehler, den ich nicht scheinen kann, herauszufinden. Da die GPS-Geräte Verbindungen herstellen, gibt mir eine von zufälligen 1-10 erfolgreichen Verbindungen eine Ausnahme außerhalb des Bereichs.
Wenn ich die rohen Daten ablege, sieht es nicht wie etwas aus, das das Gerät mir sendet. Würde irgendjemand von euch wissen, was das verursacht? Wenn diese Anwendung richtig funktioniert, könnte sie auch bis zu 3-5k Verbindungen pro Minute erhalten. Glauben Sie, dass dieser Code damit umgehen könnte?
Dies ist der Fehler, den ich jeder so oft, mit dem Abwerfen des misc Daten erhalten:
Dies ist mein Code:
namespace GPS2DB
{
class Program
{
static void Main(string[] args)
{
try
{
IPAddress ipAddress = IPAddress.Parse("10.71.150.253");
Console.WriteLine("Waiting for Tracker Connections...");
TcpListener listener = new TcpListener(ipAddress, 10000);
listener.Start();
while (true)
{
Socket client = listener.AcceptSocket();
Console.WriteLine("Connection accepted.");
var childSocketThread = new Thread(() =>
{
byte[] data = new byte[1024];
int size = client.Receive(data);
string gpsData = "";
for (int i = 0; i < size; i++)
{
Console.Write(Convert.ToChar(data[i]));
gpsData = gpsData + Convert.ToChar(data[i]);
}
string txt = gpsData;
string txt2 = (txt.Trim(new Char[] { '$', '#' }));
String[] values = txt2.Split(',');
//Console.WriteLine(txt2);
/*
Console.WriteLine("Unit ID: " + values[0]);
Console.WriteLine("Event Code: " + values[1]);
Console.WriteLine("UTC Date: " + values[2]);
Console.WriteLine("UTC Time: " + values[3]);
Console.WriteLine("Lat: " + values[4]);
Console.WriteLine("Long: " + values[5]);
Console.WriteLine("Speed: " + values[7]);
Console.WriteLine("Heading: " + values[11]);
Console.WriteLine("V+: " + values[16]);
Console.WriteLine("Cell Strength: " + values[17]);
Console.WriteLine("GPS Status: " + values[18]);
Console.WriteLine("Fuel Level: " + values[20]);
*/
//dump 2 database
string connectionString = "Data Source=DVT501;Initial Catalog=VehicleTracking;Persist Security Info=True;User ID=TABLE;Password=PASS";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("INSERT INTO Data_Dump (uid, eventCode, utcDate, utcTime, lat, long, speed, heading, voltage, cellStrength, gpsStatus, fuelLevel) VALUES (@uid, @eventCode, @utcDate, @utcTime, @lat, @long, @speed, @heading, @voltage, @cellStrength, @gpsStatus, @fuelLevel)");
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = connection;
try
{
cmd.Parameters.AddWithValue("@uid", values[0]);
cmd.Parameters.AddWithValue("@eventCode", values[1]);
cmd.Parameters.AddWithValue("@utcDate", values[2]);
cmd.Parameters.AddWithValue("@utcTime", values[3]);
cmd.Parameters.AddWithValue("@lat", values[4]);
cmd.Parameters.AddWithValue("@long", values[5]);
cmd.Parameters.AddWithValue("@speed", values[7]);
cmd.Parameters.AddWithValue("@heading", values[11]);
cmd.Parameters.AddWithValue("@voltage", values[16]);
cmd.Parameters.AddWithValue("@cellStrength", values[17]);
cmd.Parameters.AddWithValue("@gpsStatus", values[18]);
cmd.Parameters.AddWithValue("@fuelLevel", values[20]);
connection.Open();
cmd.ExecuteNonQuery();
}
catch (System.IndexOutOfRangeException e)
{
Console.WriteLine("IndexOutOfRangeException caught" + e);
Console.WriteLine(txt);
}
}
//end dump
Console.WriteLine();
client.Close();
});
childSocketThread.Start();
}
listener.Stop();
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.StackTrace);
Console.ReadLine();
}
}
}
}
C# behandelt keine Verbindungen Pooling den Weg wie sagen wir 'Delphi' also, wenn Sie erwarten, dass viele Verbindungen/Minute .. Sie werden nicht mit der Tatsache glücklich sein, dass Sie in Probleme stoßen .. auch versuchen, zu erstellen eine Liste zum Speichern der GPS-Daten in und sehen, ob Sie immer noch den gleichen Fehler bekommen .. –
MethodMan
Geringfügige Abweichung vom Thema zur Hand. AddWithValue kann Datentypen fälschlicherweise interpretieren, wenn sql so ausgeführt wird. http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready/ –