golang一个端口怎么同时提供http和https

Python056

golang一个端口怎么同时提供http和https,第1张

1、首先使用一个公共端口作为监听,让HTTP和HTTPS服务分别监听在各自的端口上。

2、其次在公共端口服务区分这是HTTP请求还是HTTPS请求。

3、最后各自转发到所服务的监听即可。

初学go,写一个端口转发工具。很方便的小工具,希望能对大家学习go语言有所帮助。

```Golang

package main

import(

"fmt"

"io"

"net"

"sync"

)

varlocksync.Mutex

vartrueList[]string

varipstring

varliststring

funcmain(){

ip="0.0.0.0:888"

server()

}

funcserver(){

fmt.Printf("Listening%s",ip)

lis,err:=net.Listen("tcp",ip)

iferr!=nil{

fmt.Println(err)

return

}

deferlis.Close()

for{

conn,err:=lis.Accept()

iferr!=nil{

fmt.Println("建立连接错误:%v\n",err)

continue

}

fmt.Println(conn.RemoteAddr(),conn.LocalAddr())

gohandle(conn)

}

}

funchandle(sconnnet.Conn){

defersconn.Close()

ip:="127.0.0.1:8888"

dconn,err:=net.Dial("tcp",ip)

iferr!=nil{

fmt.Printf("连接%v失败:%v\n",ip,err)

return

}

ExitChan:=make(chanbool,1)

gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){

io.Copy(dconn,sconn)

ExitChan<-true

}(sconn,dconn,ExitChan)

gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){

io.Copy(sconn,dconn)

ExitChan<-true

}(sconn,dconn,ExitChan)

<-ExitChan

dconn.Close()

}