SetDeadline은 클라이언트와 서버에 대해 다른 역할을 합니다.

1692 단어 go사물인터넷
클라이언트 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 앞에

좋은 웹페이지 즐겨찾기