Golang:如何查找IP:TCP连接中传入客户端的端口

sou*_*esi 0 sockets ip tcp go server

收到连接后conn, err := listener.Accept(),我想在另一端找到客户端的地址conn.我已尝试用conn.LocalAddr()conn.RemoteAddr()(文档)这样做..LocalAddr()只是给出服务器进程的地址..RemoteAddr()为客户端提供正确的IP,但是我知道要绑定到的客户端的端口号非常不同.如果它有任何区别,我会在同一台机器上运行两个独立的进程.一个是客户端,一个是服务器.关于我怎样才能找到正确的IP的任何想法:客户端的端口?我可以使用LocalAddr或者RemoteAddr

fre*_*rmz 5

在OSX上,使用go 1.4,conn.RemoteAddr()与netstat输出进行比较时,报告的主机/端口组合是正确的.

package main

import (
  "fmt"
  "net"
  "time"
)

func main() {
  ln, err := net.Listen("tcp", ":8080")
  if err != nil {
    panic(err)
  }
  for {
    conn, err := ln.Accept()
    if err != nil {
      panic(err)
    }
    fmt.Println(conn.RemoteAddr())
    time.Sleep(time.Minute)
    conn.Close()
  }
}

$ go run foo.go
127.0.0.1:63418

$ netstat -an | grep 8080
tcp4       0      0  127.0.0.1.8080         127.0.0.1.63418        ESTABLISHED
tcp4       0      0  127.0.0.1.63418        127.0.0.1.8080         ESTABLISHED
Run Code Online (Sandbox Code Playgroud)