Golang의 socket 일반적인 사용법

10845 단어 Go 언어 노트
참조:https://astaxie.gitbooks.io/build-web-application-with-golang/zh/08.1.html

클라이언트


작업 단계:
  • 서버의 IP 및 포트 번호 확인
  • TCP 연결 구축
  • 서버에 요청
  • 요청 접수
  • 서버


    작업 단계:
  • 감청된 포트 번호 확인
  • TCP 모니터링 시작
  • 클라이언트 요청 수신
  • 데이터 반환(별도의 협정에서 완료 가능)
  • 코드 인스턴스


    클라이언트:
    package main
    
    import(
      "net"
      "os"
      "fmt"
      "io/ioutil"
    )
    
    func main(){
      if len(os.Args)!=2{
        fmt.Println(os.Stderr,"Usage:%s host:port ",os.Args[0])
        os.Exit(1)
      }
      service:=os.Args[1]
      tcpAddr,err:=net.ResolveTCPAddr("tcp4",service)  
      conn,err:=net.DialTCP("tcp",nil,tcpAddr)
      checkErr(err)
      _,err=conn.Write([]byte("HEAD / HTTP/1.0\r
    \r
    "
    )) checkErr(err) result,err:=ioutil.ReadAll(conn) checkErr(err) fmt.Println(string(result)) os.Exit(0) } func checkErr(err error){ if err!=nil{ fmt.Fprintf(os.Stderr,"Fatal error: %s
    "
    ,err.Error()) os.Exit(1) } }

    서버:
    package main
    
    import(
      "fmt"
      "net"
      "os"
      "time"
    )
    
    func main(){
      service:=":7777"
      tcpAddr,err:=net.ResolveTCPAddr("tcp4",service)
      checkErr(err)
      listener,err:=net.ListenTCP("tcp",tcpAddr)
      checkErr(err)
      for{
        conn,err:=listener.Accept()
        if err!=nil{
          continue;
        }
        go handleClient(conn)
      }
    }
    
    func checkErr(err error){
      if err!=nil{
        fmt.Fprintf(os.Stderr,"Fatal error: %s",err.Error())
      }
    }
    
    func handleClient(conn net.Conn){
      defer conn.Close()
      daytime:=time.Now().String()
      conn.Write([]byte(daytime))
    }
    
    

    좋은 웹페이지 즐겨찾기