2017-10-30 12 views
0

私のサーバーにデータを送信するC#アプリケーションを使用しています。 データと一緒にバイトを送信したいので、データサイズが大きい場合はサーバコードで処理できます。 データとともにバイト値を送信する方法がわかりません。データと共にクライアントから合計バイト数を受け取って、他のコードからどのように処理する必要があるか

以下は、私のクライアント側からの送信側とサーバー側からのクライアント側の応答側です。

クライアントコード: -

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; 
     } 
    } 

サーバコード: -

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

答えて

0

缶混乱にデータを文字列にデータをアップコンバートし、不必要な処理時間を追加しないでください。次のコードを試してください:

  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()); 
関連する問題