分享
Golang http ABC
shengjuntu · · 2806 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
//html 文件参见
http://www.ieyebrain.com:8080/pts/src/master/
package main
import (
"flag"
"net/http"
"io"
"strings"
"strconv"
)
type ClientInfo struct {
id int
ip string
name string
}
var (
addr = flag.String("addr", ":9191", "pts master address")
clients = make(map[int] ClientInfo)
sn = 0
)
type Web struct {
w http.ResponseWriter
req *http.Request
}
func newWeb(w http.ResponseWriter, req *http.Request) *Web {
return &Web{w:w,req:req}
}
func (p *Web) getClientIp() string {
r := p.req
ip := r.Header.Get("X-Real-IP")
if ip == "" {
ip = strings.Split(r.RemoteAddr, ":")[0]
}
if ip == "[" {
ip = "localhost"
}
return ip
}
func (p *Web) beginTag(tag string) {
io.WriteString(p.w, "<" + tag + ">")
}
func (p *Web) endTag(tag string) {
io.WriteString(p.w, "</" + tag + ">")
}
func (p *Web) tagVal(tag string, val string) {
io.WriteString(p.w, "<" + tag + ">" + val + "</" + tag + ">")
}
func (p *Web) write(val string) {
io.WriteString(p.w, val)
}
func (p *Web) htmlTmpl(title string, body string) {
p.beginTag("html")
p.beginTag("head")
p.tagVal("title", title)
p.endTag("head")
p.write(body)
p.endTag("body")
p.endTag("html")
}
func listHandler(w http.ResponseWriter, req *http.Request) {
web := newWeb(w,req)
web.beginTag("html")
web.beginTag("head")
web.tagVal("title", "PTS Master")
web.endTag("head")
web.beginTag("body")
web.beginTag("ul")
for _,v := range clients {
web.beginTag("li")
web.write(strconv.Itoa(v.id))
web.write(" : ")
web.write(v.ip)
web.endTag("li")
}
web.write(`<hr>`);
web.write(`<a href="index.html">home</a>`);
web.endTag("ul")
web.endTag("body")
web.endTag("html")
}
func loginHandler(w http.ResponseWriter, req *http.Request) {
web := newWeb(w,req)
req.ParseForm()
id := sn //req.Form["id"]
//name := req.Form["name"]
ip := web.getClientIp()
clients[id] = ClientInfo {
id:id,
name:ip,
ip:ip}
sn++
web.htmlTmpl("LoginOK",`<a href="list">loginRecord</a>`)
}
func main() {
flag.Parse()
fileSvr := http.FileServer(http.Dir("html"))
http.Handle("/",fileSvr)
http.HandleFunc("/list", listHandler)
http.HandleFunc("/login", loginHandler)
err := http.ListenAndServe(*addr, nil)
panic(err)
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2806 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
//html 文件参见
http://www.ieyebrain.com:8080/pts/src/master/
package main
import (
"flag"
"net/http"
"io"
"strings"
"strconv"
)
type ClientInfo struct {
id int
ip string
name string
}
var (
addr = flag.String("addr", ":9191", "pts master address")
clients = make(map[int] ClientInfo)
sn = 0
)
type Web struct {
w http.ResponseWriter
req *http.Request
}
func newWeb(w http.ResponseWriter, req *http.Request) *Web {
return &Web{w:w,req:req}
}
func (p *Web) getClientIp() string {
r := p.req
ip := r.Header.Get("X-Real-IP")
if ip == "" {
ip = strings.Split(r.RemoteAddr, ":")[0]
}
if ip == "[" {
ip = "localhost"
}
return ip
}
func (p *Web) beginTag(tag string) {
io.WriteString(p.w, "<" + tag + ">")
}
func (p *Web) endTag(tag string) {
io.WriteString(p.w, "</" + tag + ">")
}
func (p *Web) tagVal(tag string, val string) {
io.WriteString(p.w, "<" + tag + ">" + val + "</" + tag + ">")
}
func (p *Web) write(val string) {
io.WriteString(p.w, val)
}
func (p *Web) htmlTmpl(title string, body string) {
p.beginTag("html")
p.beginTag("head")
p.tagVal("title", title)
p.endTag("head")
p.write(body)
p.endTag("body")
p.endTag("html")
}
func listHandler(w http.ResponseWriter, req *http.Request) {
web := newWeb(w,req)
web.beginTag("html")
web.beginTag("head")
web.tagVal("title", "PTS Master")
web.endTag("head")
web.beginTag("body")
web.beginTag("ul")
for _,v := range clients {
web.beginTag("li")
web.write(strconv.Itoa(v.id))
web.write(" : ")
web.write(v.ip)
web.endTag("li")
}
web.write(`<hr>`);
web.write(`<a href="index.html">home</a>`);
web.endTag("ul")
web.endTag("body")
web.endTag("html")
}
func loginHandler(w http.ResponseWriter, req *http.Request) {
web := newWeb(w,req)
req.ParseForm()
id := sn //req.Form["id"]
//name := req.Form["name"]
ip := web.getClientIp()
clients[id] = ClientInfo {
id:id,
name:ip,
ip:ip}
sn++
web.htmlTmpl("LoginOK",`<a href="list">loginRecord</a>`)
}
func main() {
flag.Parse()
fileSvr := http.FileServer(http.Dir("html"))
http.Handle("/",fileSvr)
http.HandleFunc("/list", listHandler)
http.HandleFunc("/login", loginHandler)
err := http.ListenAndServe(*addr, nil)
panic(err)
}