당신은 Read
방법의 반환 값을 무시하는 매우 일반적인 실수를하고있다.
이 메서드는 버퍼에 데이터를 읽고 버퍼에 있던 바이트 수를 반환합니다. 해당 반환 값을 무시하고 전체 버퍼를 디코딩하면 문자열은 버퍼만큼 길어지고 끝에 많은 가비지 데이터가 포함됩니다.
또한 Read
메서드는 0을 반환 할 때까지 반복적으로 호출해야합니다. 메서드가 한 번의 호출로 모든 데이터를 반환 할 필요가 없기 때문입니다. 각 바이트는 한 문자로 디코딩 될 때
Dim readData As string
Dim length As Integer = 0
Dim size As Integer
Do
size = serverStream.Read(inStream, length, buffSize - length)
length += size
Loop Until size = 0
readData = System.Text.Encoding.ASCII.GetString(inStream, 0, length)
MessageBox.Show(length.ToString())
MessageBox.Show(readData.Length.ToString())
는 ASCII 인코딩을 사용하는 바와 같이, length
및 readData.Length
은 동일 할 것이다. 예를 들어 UTF-8 인코딩을 사용하는 경우 length
은 읽을 바이트 수이고 readData.Length
은 해당 바이트가 디코딩 된 문자 수입니다. 당신이 일반적으로에서 읽는 유지해야하지만,
Dim bytesRead = serverStream.Read(inStream, 0, buffSize)
Dim text = Encoding.ASCII.GetString(inStream, 0, bytesRead)
참고 :
http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work –