Мне нужно, чтобы моя программа была в середине соединения и правильно передавала данные в обоих направлениях.Я написал этот код, но он не работает должным образом
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", ":8120")
if err != nil {
fmt.Println(err)
return
}
defer listener.Close()
fmt.Println("Server is listening...")
for {
var conn1, conn2 net.Conn
var err error
conn1, err = listener.Accept()
if err != nil {
fmt.Println(err)
conn1.Close()
continue
}
conn2, err = net.Dial("tcp", "185.151.245.51:80")
if err != nil {
fmt.Println(err)
conn2.Close()
continue
}
go handleConnection(conn1, conn2)
go handleConnection(conn2, conn1)
}
}
func handleConnection(conn1, conn2 net.Conn) {
defer conn1.Close()
for {
input := make([]byte, 1024)
n, err := conn1.Read(input)
if n == 0 || err != nil {
break
}
conn2.Write([]byte(input))
}
}
Проблема в том, что данные повреждены, например. Левый оригинал, правый - то, что я получил.Конец полученного файла не читается. Но в начале все в порядке.Я пытался изменить размер входного среза.Если размер> 0 и <8, все хорошо, но медленно.Если я установлю очень большой размер ввода, искажение данных станет более ужасным.Что я делаю не так? </p>