Преобразовать эту строку кода из VB.NET в C #? - PullRequest
0 голосов
/ 02 апреля 2012

Как мне преобразовать следующую строку кода из VB.NET в C #.

Dim bytes(tcpClient.ReceiveBufferSize) As Byte

Я получил следующую строку с веб-сайта developerfusion, но она дает неверные результаты в моей программе.

byte[] bytes = new byte[tcpClient.ReceiveBufferSize + 1];

Вот пример всего моего кода в Visual Basic.

Dim tcpClient As New System.Net.Sockets.TcpClient()
TcpClient.Connect(txtIP.Text, txtPort.Text)

Dim networkStream As NetworkStream = TcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then

    Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(txtSend.Text.Trim())

    networkStream.Write(sendBytes, 0, sendBytes.Length)

    ' Read the NetworkStream into a byte buffer.
    TcpClient.ReceiveBufferSize = 52428800 '50 MB

    'Do I need to clean the buffer?
    'Get the string back (response)
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    networkStream.Read(bytes, 0, CInt(TcpClient.ReceiveBufferSize))

    ' Output the data received from the host to the console.
    Dim returndata As String = Encoding.ASCII.GetString(bytes)

1 Ответ

1 голос
/ 02 апреля 2012

Visual Basic задает максимальную границу массива вместо длины массива (массивы начинаются с индекса 0), поэтому ваше преобразование добавило дополнительный байт.Однако в вашем коде правильный путь будет таким:

byte[] bytes = new byte[tcpClient.ReceiveBufferSize]; 

Если вы получите неправильные результаты, сообщите нам, что именно не так.Может быть, это другая часть кода.

Редактировать: Удалить \ 0, как это:

byte[] bytes = new byte[tcpClient.ReceiveBufferSize];
int bytesRead = networkStream.Read(bytes, 0, tcpClient.ReceiveBufferSize);
// Output the data received from the host to the console. 
string returndata = Encoding.ASCII.GetString(bytes,0,bytesRead);

Редактировать: Еще лучше читатьданные в пакетах, поэтому вам не нужно резервировать большой буфер заранее:

byte[] bytes = new byte[4096]; //buffer
int bytesRead = networkStream.Read(bytes, 0, bytes.Length);
while(bytesRead>0)
{
    // Output the data received from the host to the console. 
    string returndata = Encoding.ASCII.GetString(bytes,0,bytesRead);
    Console.Write(returndata);
    bytesRead = networkStream.Read(bytes, 0, bytes.Length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...