SetDeadline은 클라이언트와 서버에 대해 다른 역할을 합니다.
package main
import (
"fmt"
"net"
"time"
)
const RECV_BUF_LEN = 1024
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil {
panic(err.Error())
}
defer conn.Close()
buf := make([]byte, RECV_BUF_LEN)
for i := 0; i < 1000; i++ {
if conn==nil{
fmt.Println("--------------------")
}
t:=time.Now()
conn.SetDeadline(t.Add(1*time.Second))//3S
//
msg := fmt.Sprintf("Hello World, %03d", i)
n, err := conn.Write([]byte(msg))
if err != nil {
println("Write Buffer Error:", err.Error())
break
}
fmt.Println(" ", msg)
//
n, err = conn.Read(buf)
if err != nil {
println("Read Buffer Error:", err.Error())
//conn=nil
continue
}
fmt.Println(" ", string(buf[0:n]))
if err := conn.SetReadDeadline(time.Time{}); err != nil {
break
}
//
time.Sleep(5*time.Second)
fmt.Println(" IP+ ", conn.LocalAddr().String())
}
}
-----------------------------------------------------
Hello World 보내기, 000 Read Buffer Error: read tcp 127.0.0.1:60025->127.0.1:888: i/o timeout 보내기 Hello World, 001 Read Buffer Error: read tcp 127.0.0.1:60025->127.0.1:888: i/o timeout 보내기 Hello World, 002 Read Buffer Error: read tcp 127.0.1:60025->127.0.0.1:888: i/o timeout 보내기 Hello World,003 Read Buffer Error: read tcp 127.0.1:60025->127.0.0.1:8888: i/o timeout Hello World, 004 보내기
서버 쪽에서 데이터를 보내지 않지만, 이 경우 다시 전화를 걸지 않습니다.conn은 잃어버리지 않았습니다.그럼 어떻게 다시 재생 번호---conn=nil///////continue 앞에
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Go Fiber 및 PlanetScale로 REST API 구축 - 4부다시 사용자 핸들러에 UpdateUser라는 새 함수를 추가합니다. 업데이트 사용자를 main.go에 등록 이제 응용 프로그램을 다시 실행하십시오. 이전에 생성한 사용자를 업데이트합니다. 응답 사용자가 존재하지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.