2017-10-30 12 views
0

ich eine C# -Anwendung verwenden die Daten auf meinen Server sendet. Ich mag Bytes senden zusammen mit den Daten, so dass ich bei Server-Code verarbeiten kann, wenn die Datengröße groß ist es nur dort brechen kann. Ich bin nicht immer, wie zusammen mit den Datenbytes Wert zu senden.will insgesamt Bytes zusammen mit den Daten aus dem Client empfangen, und wie ich es von anderem Code zu handhaben

Die unten ist mein Klient Seitenteil und meine Server-Seite zu senden Teil an den Client zu reagieren.

Client-Code: -

public bool sendData(StringBuilder QueryVal) 
    { 
     TcpClient clientSocket = new System.Net.Sockets.TcpClient(); 
     try 
     { 

      clientSocket.Client.Connect(Serverip, 8888); 
      var connect = clientSocket.Connected;// it can be ? clientSocket.Client.Connected 
      if (connect == true) 
      { 
       try 
       { 
        NetworkStream serverStream = clientSocket.GetStream(); 
        byte[] outStream = System.Text.Encoding.ASCII.GetBytes(QueryVal + "$"); 
        serverStream.Write(outStream, 0, outStream.Length); 
        String decodedString = System.Text.Encoding.ASCII.GetString(outStream); 
        decodedData(decodedString.ToString()); 

        serverStream.Flush(); 
        byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; 
        serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize); 
        string returndata = System.Text.Encoding.ASCII.GetString(inStream); 

        //MessageBox.Show("Receive data is: " + returndata); 
        int SendByte = outStream.Count(); 
        int ReceivedByte = Convert.ToInt32(returndata); 
        try 
        { 
         clientSocket.Client.Shutdown(SocketShutdown.Both); 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.StackTrace); 
        } 
        bool chk = clientSocket.Connected;// this line should be comment 
        if (SendByte == ReceivedByte) { return true; } 
        else { return false; } 
       } 
       catch (Exception ex) 
       { 
        StackFrame objtrack = new StackFrame(); 
        var methodinfo = objtrack.GetMethod(); 
        string calssName = methodinfo.DeclaringType.Name; 
        string methoname = methodinfo.Name; 
        string Lineno = Convert.ToString(ex.LineNumber()); 
        log(ex.Message, calssName, methoname, Lineno); 
        return false; 
       } 
      } 
      else 
      { 
       return false; 
      } 
     } 
     catch (Exception ex) 
     { 

      StackFrame objtrack = new StackFrame(); 
      var methodinfo = objtrack.GetMethod(); 
      string calssName = methodinfo.DeclaringType.Name; 
      string methoname = methodinfo.Name; 
      string Lineno = Convert.ToString(ex.LineNumber()); 
      log(ex.Message, calssName, methoname, Lineno); 
      return false; 
     } 
    } 

Server Code: -

Byte[] sendBytesAA = Encoding.ASCII.GetBytes(ReceiveSize.ToString()); 
ReceiveSize = 0; 
networkStream.Write(sendBytesAA, 0, sendBytesAA.Length); 

Antwort

0

Konvertieren Sie keine Daten an Zeichenfolge in can Schlamassel die Daten und fügt unnötige Verarbeitungszeit. Versuchen Sie folgenden Code ein:

  TcpClient clientSocket = new TcpClient(); 

      NetworkStream serverStream = clientSocket.GetStream(); 

      List<byte> inStream = new List<byte>(); 
      serverStream.Read(inStream.ToArray(), 0, (int)clientSocket.ReceiveBufferSize); 
      long length = inStream.Count; 
      byte[] byteLength = BitConverter.GetBytes(length); 
      inStream.InsertRange(0, byteLength.ToList()); 
Verwandte Themen