Ich versuche eine kontinuierliche Verbindung zwischen URL und meinem Code zu finden. Ich sende alle 500m/s Daten an http in JSON. Die Verbindung wird jedoch getrennt und erneut verbunden, als ich WireShark überprüfte. Ich habe versucht drei (httpwebrequest, cURL, Webclient) und was ich will ist sie kontinuierliche Verbindung zu geben. Nun, ich will nur, dass cURL das macht. Hier sind die Codes, die ich ausprobiert habe, und ein Capture von wireshark, damit Sie besser verstehen.C# HttpWebRequest oder cURL wollen kontinuierliche Verbindung
cURL 100m/s Funktion
static private void SystemStatusTimer_Elapsed(object sender, ElapsedEventArgs e)
{
string json = new JavaScriptSerializer().Serialize(new
{
cpuusage = CPU,
availablememory = AVAILMEMORY,
availableharddiskspace = AVAILABLEHD
});
Easy.WriteFunction wf = SystemStatusWF; //response
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_URL, SYSTEMSTATUS_SERVER);
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, json);
var resultOK = SystemStatusEasy.Perform();
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); //response
}
Hauptfunktion
static void Main()
{
Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
SystemStatusEasy = new Easy();
var slistHeaders = new Slist();
slistHeaders.Append("Content-Type: application/json");
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_VERBOSE, 1L);
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, slistHeaders);
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_CUSTOMREQUEST, "POST");
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_POST, true);
SystemStatusEasy.SetOpt((CURLoption)213, 1L); //keep alive(not sure in c#)
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_TIMEOUT, false);
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_COOKIEFILE, "cookie.txt");
SystemStatusEasy.SetOpt(CURLoption.CURLOPT_COOKIEJAR, "cookie.txt");
systemStatusTimer = new Timer(500);
systemStatusTimer.Elapsed += SystemStatusTimer_Elapsed;
systemStatusTimer.Start();
Console.ReadKey();
}
Wie man auf dem Wireshark-Capture sehen können, sie durch fin/ack getrennt werden und dann verbindet sich erneut mit Syn. Ich will nur ein SYN wenn das Programm startet und dann FIN/ACK am Ende des Fortschritts. Jede Hilfe würde geschätzt werden.
Meinst du, du willst die Verbindung am Leben erhalten? Sie können es nicht sicherstellen, das Beste, was Sie tun können, ist das, was Sie bereits getan haben. Bitten Sie den Server, die Verbindung am Leben zu erhalten. Wenn der Server die Verbindung nach dem Senden einer Antwort jedoch schließt, können Sie nichts tun. – Gusman
Also ist es am Leben, die die Verbindung zwischen dem Server und dem Programm öffnet, bis der Server die Verbindung schließt? Wenn ja, kann ich wissen, wie man die Verbindung in cURL aufrecht erhält? Ich tat dies (SystemStatusEasy.SetOpt ((CURLoption) 213, 1L);) weil ich nicht die richtige API für .NET finden konnte, aber ich weiß in C, es hat curl_easy_setopt (curl, CURLOPT_TCP_KEEPALIVE, 1L) ;. Es könnte in https://curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPALIVE.html gefunden werden. Ich weiß, dass CURLOPT_TCP_KEEPALIVE in enum ist und die Nummer 213 hat. Also habe ich versucht, es wie SystemStatusEasy.SetOpt ((CURLoption) 213, 1L) zu setzen; –
Aber nicht sicher, ob ich recht oder nicht getan habe. Es gibt nicht viele Informationen über C# und cURL..T^T Irgendwelche Vorschläge für einen armen, kämpfenden Typen? –