עבר עריכה לאחרונה בתאריך 06.09.09 בשעה 09:50:43 על-ידי Nesher (מנהל הפורום)
הבעיה היא שכאשר קליינט מתחבר לסרבר שבניתי הוא שולח סטרינגים אחד אחרי השני שמתחילים ומסתיימים ב-CHARים מיוחדים שהחלטתי עליהם מראש.לפעמים השליחה מתבצעת מהר מדיי והסרבר שלי "לא שם לב" לזה שהגיע ה CHAR שמסמל סיום של סטרינג ואז הוא קולט 2 סטרינגים יחד.
הנה קטע הקוד של האזנה לקליינט:
private void HandleClientComm(object client) { TcpClient tcpClient = (TcpClient)client; NetworkStream ns = tcpClient.GetStream(); byte[] message = new byte[4096]; int bytesRead = 1; string currentMessage = string.Empty; string currentInst = string.Empty; ASCIIEncoding encoder = new ASCIIEncoding(); while (true)//ns.DataAvailable { if (bytesRead == 0) break; try { bytesRead = ns.Read(message, 0, 4096); } catch { break; } currentMessage = encoder.GetString(message, 0, bytesRead); AddTextToTextBox(currentMessage); if (!string.IsNullOrEmpty(currentMessage)) { if ((currentMessage[0] == STX) && (currentMessage[currentMessage.Length - 1] == ETX)) { currentInst += currentMessage; AddItemToQueue(currentInst); AddDataToRow(tcpClient.Client.RemoteEndPoint.ToString(), currentInst); currentInst = string.Empty; } } createQuery(); } AddTextToTextBox(tcpClient.Client.RemoteEndPoint.ToString() + " - Disconnected on: " + DateTime.Now); RemoveItemFromDataGrid(tcpClient.Client.RemoteEndPoint.ToString()); tcpClient.Close(); }
|
איך אפשר לייעל את העבודה שיקלוט את ה CHAR שנקרא STX בתור תחילת מחרוזת
ואת ה CHAR שנקרא ETX בתור סוף המחרוזת
תודה מראש לעוזרים
