私はURLと私のコードの間に連続的な接続を見つけようとしています。私は500m/sごとにjsonでhttpにデータを送信しています。しかし、私がWireSharkをチェックしたときに、接続が切断され、再度接続されています。私は3つ(httpwebrequest、cURL、webclient)を試して、私は彼らが連続的な接続を与えることを望んでいる。さて、私はcURLがそれをやりたいだけです。私が試したコードとwiresharkからのキャプチャがあります。C#HttpWebRequestまたはcURLの連続接続を希望する
cURLの 100メートル/ sの機能
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
}
主な機能
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();
}
あなたがWiresharkのキャプチャに見ることができるように、彼らはその後、フィン/ ACKとによって切断されていますSynによって再び接続します。私はちょうどプログラムが始まるときに1つのSYNをし、次に進捗の最後にFIN/ACKをします。どんな助けでも感謝します。
接続を維持したいのですか?あなたはそれを保証することはできません。あなたができることは、すでに行ったことです。サーバーに接続を維持するように依頼してください。しかし、サーバーが応答を送信した後に接続を閉じることを決定した場合は、 – Gusman
サーバが接続を閉じるまで、サーバとプログラムの間の接続を開くKeep Aliveがありますか?それは私がcURLで生きている接続を維持する方法を知っているかもしれませんか?私はこれを行いました(SystemStatusEasy.SetOpt((CURLoption)213、1L);).NET用の正しいapiが見つかりませんでしたが、C言語ではcurl_easy_setopt(curl、CURLOPT_TCP_KEEPALIVE、1L);があります。 https://curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPALIVE.htmlにあります。私はCURLOPT_TCP_KEEPALIVEが列挙型であり、213の数を持っていることを知っています。だから私はSystemStatusEasy.SetOpt((CURLoption)213、1L)のように入れようとしました。 –
しかし、私は正しいかどうかはわかりません.C#とcURLについての情報はあまりありません.T^T苦しい貧しい人のための提案はありますか? –