go语言渐入佳境-网络[4]-port

端口port

服务器运行在主机上。 IP地址将定位主机。但是在每台计算机上可能有很多服务,需要一种简单的方法来区分它们。 TCP,UDP,SCTP等使用的方法是使用端口号。

有许多“标准”端口。 Telnet通常使用端口23,TCP协议。 DNS使用端口53,使用TCP或UDP。 FTP使用端口21和20,一个用于命令,另一个用于数据传输。
HTTP通常使用端口80,但它通常使用端口8000,8080和8088,所有端口都使用TCP。

在Unix系统上,常用端口列在文件/etc/services中。 Go具有查询此文件的功能

1
func LookupPort(network, service string) (port int, err os.Error)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* LookupPort
*/

package main

import (
"net"
"os"
"fmt"
)

func main() {
if len(os.Args) != 3 {
fmt.Fprintf(os.Stderr,
"Usage: %s network-type service\n",
os.Args[0])
os.Exit(1)
}
networkType := os.Args[1]
service := os.Args[2]

port, err := net.LookupPort(networkType, service)
if err != nil {
fmt.Println("Error: ", err.Error())
os.Exit(2)
}

fmt.Println("Service port ", port)
os.Exit(0)
}

测试

1
2
$ ./net tcp telnet
Service port 23