我正在創建一個基於套接字的遙測應用程序,我使用兩個無線調制解調器來發送/接收數據,一個應用程序通過調制解調器1發送數據,另一個程序通過調制解調器2獲取數據,間隔時間爲一秒,似乎接收器應用程序(服務器)正在使用大部分CPU和RAM資源(99%的CPU使用率!),並且其內存使用量穩步增加!所以幾分鐘後我的程序幾乎停止響應,我的數據根本不正確,所以數據不能被解析,似乎我的程序收到了發送數據的多個副本,我的原始數據包大約有70個字節,但在一些秒其規模的增加,我想我的接收緩衝區已滿,數據與以前的數據,我正在尋找一些建議混合,這裏是我的服務器程序接收處理程序:使用太多資源的套接字服務器
private void DataReceive()
{
handler.ReceiveBufferSize = 100;
try
{
byte[] bytes = new byte[100];
int byteRec;
while (true)
{
timer1.Enabled = true;
while (true)
{
byteRec = handler.Receive(bytes);
if (byteRec > 0)
{
data = System.Text.Encoding.UTF8.GetString(bytes, 0, byteRec);
break;
}
}
if (data.Length >= 30)
{
if (data.Substring(0, 1) == "#")//pasrse data, correct!
{
label27.Text = data.Length.ToString();
textBox1.Text = data;
string a = data.Substring(1);
string[] b = a.Split('-');
SetControlPropertyThreadSafe(lblTotal, "Text", b[0]);
SetControlPropertyThreadSafe(lblFlow, "Text", b[1]);
float real_analog2 = (1 - (((20 - float.Parse(b[4]))/(20 - 4)))) * Analog2_Max;
if (real_analog2 < 0)
real_analog2 = 0;
SetControlPropertyThreadSafe(lblAnalog, "Text", real_analog2.ToString());
if (b[2] == "1")//off
SetControlPropertyThreadSafe(lblMotion, "Text", "off");
else if (b[2] == "0")//on
SetControlPropertyThreadSafe(lblMotion, "Text", "on");
if (b[3] == "1")//off
SetControlPropertyThreadSafe(lblMotion2, "Text", "off");
else if (b[3] == "0")//on
SetControlPropertyThreadSafe(lblMotion2, "Text", "on");
SetControlPropertyThreadSafe(lblV1, "Text", b[5]);
SetControlPropertyThreadSafe(lblV2, "Text", b[6]);
SetControlPropertyThreadSafe(lblV3, "Text", b[7]);
SetControlPropertyThreadSafe(lblI1, "Text", b[8]);
SetControlPropertyThreadSafe(lblI2, "Text", b[9]);
SetControlPropertyThreadSafe(lblI3, "Text", b[10]);
SetControlPropertyThreadSafe(lblLevelPercent, "Text", b[11]);
SetControlPropertyThreadSafe(lblLevelValue, "Text", b[12]);
}
}
FillLstMsg(data);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
有什麼特別的原因,你沒有使用NetworkStream(與它的StreamReader讀取它作爲文本)? – harold
我該如何使用NetworkStream?我只想讀取通過無線調制解調器發送的數據 –
非常簡單,只需用socket作爲參數創建一個新的。 – harold