У меня есть соединение, созданное, как это:Почему conn.Read() ничего не записывает в [] байт, но работает bufio.Reader.ReadString()?
conn, err = net.Dial("tcp", "127.0.0.1:20000")
Я попытался чтения из этой связи двух способов. Я думаю, они оба должны работать, но первый вариант этого не делает.
Вот первый способ сделать это:
var bytes []byte
for i := 0; i < 4; i++ {
conn.Read(bytes)
}
fmt.Printf("%v", bytes)
Выход этого метода:
[]
И здесь то же самое, сделано с bufio.Reader
:
func readResponse(conn net.Conn) (response string, err error) {
reader := bufio.NewReader(conn)
_, err = reader.Discard(8)
if err != nil {
return
}
response, err = reader.ReadString('\n')
return
}
Эта функция возвращает ответ, заданный сервером на другом конце TCP-соединения.
Почему bufio.Reader.Read()
работает, но net.Conn.Read()
нет?
Ну, это совершенно очевидно: 'Read' читает ** в ** предоставленный' [] byte'. Ваш '[] byte' пуст, имеет нулевую длину, и вся эта нулевая длина заполняется. Так что технически ваш 'Read'call работал так, как он полностью заполнял предоставленный байтовый фрагмент данными из соединения. Вы отправились в тур по городу? – Volker
Спасибо. Я новичок во многих концепциях, поэтому некоторые вещи, которые я читал в туре, или первый раз, когда я смотрю на документацию о функции, переходят мне в голову, не осознавая этого.Извините за раздражение. –