수신 측이 Go 인 소켓을 통해 잘 통신하는 두 개의 작은 프로그램이 있습니다. 내 메시지가 1024 바이트 버퍼에 들어가기에 충분히 작고 연결에서 하나의 읽기에서 수신 할 수 있지만 지금은 100k + 이상의 이미지에서 데이터를 전송하려고 할 때 모든 것이 복숭아로 작동합니다. 모든 이미지가 내부에 들어갈 때까지 버퍼를 늘리지 않는 것이 올바른 해결책이라고 가정합니다.Go에서 소켓을 통해 파일 데이터를 검색하려면 어떻게합니까?
의사 이동 : 나는 내 소켓 루틴을 읽을 개선 할 수있는 방법을
var buf = make([]byte,1024)
conn, err := net.Dial("tcp", ":1234")
for {
r, err := conn.Read(buf[0:])
go readHandler(string(buf[0:r]),conn)
}
는 몇 바이트의 간단한 메시지도 큰 데이터를 모두 받아? 전체 이미지 데이터를 image.Decode에서 사용하기 위해 io.Reader로 변환 할 수 있다면 보너스 포인트입니다.
어떻게 conn에서 ReadFull을 할 수 있습니까? conn.i.Reader입니까? – Nick
예. net.Conn에 "Read (b [] byte) (n int, err os.Error)"메서드가 있기 때문에 net.Conn은 io.Reader를 구현합니다. –