golang基础-服务端、客户端VS服务端、TCP请求数据

来源:互联网 发布:2017淘宝双十一报名 编辑:程序博客网 时间:2024/05/21 09:27

服务端处理流程

服务端:
a. 监听端口
b. 接收客户端的链接
c. 创建goroutine,处理该链接

package mainimport (    "fmt"    "net")func main() {    fmt.Println("start server...")    listen, err := net.Listen("tcp", "0.0.0.0:50000")    if err != nil {        fmt.Println("listen failed, err:", err)        return    }    for {        conn, err := listen.Accept()        if err != nil {            fmt.Println("accept failed, err:", err)            continue        }        go process(conn)    }}func process(conn net.Conn) {    defer conn.Close()    for {        buf := make([]byte, 512)        n, err := conn.Read(buf)        if err != nil {            fmt.Println("read err:", err)            return        }        fmt.Printf(string(buf[0:n]))    }}

在go的终端启动service
这里写图片描述

然后cmd启动命令窗口
这里写图片描述

然后在启动的命令行窗口输入内容,然后在go的终端会输输出对应的信息,效果图如下:
这里写图片描述

客户端VS服务端处理流程

客户端:
a. 建立与服务端的链接
b. 进行数据收发
c. 关闭链接

这个例子需要另外的客户端client代码
clien.go

package mainimport (    "bufio"    "fmt"    "net"    "os"    "strings")func main() {    conn, err := net.Dial("tcp", "localhost:50000")    if err != nil {        fmt.Println("Error dialing", err.Error())        return    }    defer conn.Close()    inputReader := bufio.NewReader(os.Stdin)    for {        input, _ := inputReader.ReadString('\n')        trimmedInput := strings.Trim(input, "\r\n")        if trimmedInput == "Q" {            return        }        _, err = conn.Write([]byte(trimmedInput))        if err != nil {            return        }    }}

这里写图片描述

tcp获取百度数据

package mainimport (    "fmt"    "io"    "net")func main() {    conn, err := net.Dial("tcp", "www.baidu.com:80")    if err != nil {        fmt.Println("Error dialing", err.Error())        return    }    defer conn.Close()    msg := "GET / HTTP/1.1\r\n"    msg += "Host:www.baidu.com\r\n"    msg += "Connection:keep-alive\r\n"    //msg += "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\n"    msg += "\r\n\r\n"    //io.WriteString(os.Stdout, msg)    n, err := io.WriteString(conn, msg)    if err != nil {        fmt.Println("write string failed, ", err)        return    }    fmt.Println("send to baidu.com bytes:", n)    buf := make([]byte, 4096)    for {        count, err := conn.Read(buf)        fmt.Println("count:", count, "err:", err)        if err != nil {            break        }        fmt.Println(string(buf[0:count]))    }}

运行结果如下:

PS E:\golang\go_pro\src\safly> go run tcp.gosend to baidu.com bytes: 63count: 750 err: <nil>HTTP/1.1 200 OKDate: Sun, 12 Nov 2017 06:05:34 GMTContent-Type: text/htmlContent-Length: 14613Last-Modified: Tue, 07 Nov 2017 02:55:00 GMTConnection: Keep-AliveVary: Accept-EncodingSet-Cookie: BAIDUID=9D2FCA4F5E1079FFED3E6E45106DB21E:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BIDUPSID=9D2FCA4F5E1079FFED3E6E45106DB21E; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: PSTM=1510466734; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comP3P: CP=" OTI DSP COR IVA OUR IND COM "Server: BWS/1.1X-UA-Compatible: IE=Edge,chrome=1Pragma: no-cacheCache-control: no-cacheAccept-Ranges: bytescount: 4096 err: <nil><!DOCTYPE html><!--STATUS OK--><html><head>        <meta http-equiv="content-type" content="text/html;charset=utf-8">        <meta http-equiv="X-UA-Compatible" content="IE=Edge">        <link rel="dns-prefetch" href="//s1.bdstatic.com"/>        <link rel="dns-prefetch" href="//t1.baidu.com"/>        <link rel="dns-prefetch" href="//t2.baidu.com"/>        <link rel="dns-prefetch" href="//t3.baidu.com"/>        <link rel="dns-prefetch" href="//t10.baidu.com"/>        <link rel="dns-prefetch" href="//t11.baidu.com"/>        <link rel="dns-prefetch" href="//t12.baidu.com"/>        <link rel="dns-prefetch" href="//b1.bdstatic.com"/>        <title>百度一下,你就知道</title>        <link href="http://s1.bdstatic.com/r/www/cache/static/home/css/index.css" rel="stylesheet" type="text/css" />        <!--[if lte IE 8]><style index="index" >#content{height:480px\9}#m{top:260px\9}</style><![endif]-->        <!--[if IE 8]><style index="index" >#u1 a.mnav,#u1 a.mnav:visited{font-family:simsun}</style><![endif]-->        <script>var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/);if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace("http://"+location.host+"/s?"+hashMatch[1]);}var ns_c = function(){};</script>        <script>function h(obj){obj.style.behavior='url(#default#homepage)';var a = obj.setHomePage('//www.baidu.com/');}</script>        <noscript><meta http-equiv="refresh" content="0; url=/baidu.html?from=noscript"/></noscript>        <script>window._ASYNC_START=new Date().getTime();</script></head><body link="#0000cc"><div id="wrapper" style="display:none;"><div id="u"><a href="//www.baidu.com/gaoji/preferences.html"  onmousedown="return user_c({'fm':'set','tab':'setting','login':'0'})">搜索设置</a>|<a id="btop" href="/"  onmousedown="return user_c({'fm':'set','tab':'index','login':'0'})">百度首页</a>|<a id="lb" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" onclick="return false;"  onmousedown="return user_c({'fm':'set','tab':'login'})">登录</a><a href="https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F"  onmousedown="return user_c({'fm':'set','tab':'reg'})" target="_blank" class="reg">注册</a></div><div id="head"><div class="s_nav"><a href="/"class="s_logo" onmousedown="return c({'fm':'tab','tab':'logo'})"><img src="//www.baidu.com/img/baidu_jgylogo3.gif" width="117" height="38" border="0" alt="到百度首页" title="到百度首页"></a><div class="s_tab" id="s_tab"><a href="http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'news'})">新闻</a>&#12288;<b>网页</b>&#12288;<a href="http://tieba.baidu.com/f?kw=&fr=wwwt" wdfield="kw"  onmousedown="return c({'fm':'tab','tab':'tieba'})">贴吧</a>&#12288;<a href="http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'zhidao'})">知道</a>&#12288;<a href="http://music.baidu.com/search?fr=ps&key=" wdfield="key"  onmousedown="return c({'fm':'tab','tab':'music'})">音乐</a>&#12288;<a href="http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'pic'})">图片</a>&#12288;<a href="http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&word=" wdfield="word"   onmousedown="return c({'fm':'tab','tab':'video'})">视频</a>&#12288;<a href="http://map.baidu.com/m?word=&fr=ps01000" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'map'})">地图</a>&#12288;<a href="http://wenku.baidu.com/search?word=&lm=0&od=0" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'wenku'})">文库</a>&#12288;<a href="//www.baidu.com/more/"  onmousedown="return c({'fm':'tab','tab':'more'})">更多»</a></div></div><form id="form" name="f" action="/s" class="fm" ><input type="hidden" name="ie" value="utf-8"><input type="hidden" name="f" value="8"><input type="hidden" name="rsv_bp" value="1"><span class="bg s_ipt_wr"><input name="wd" id="kw" class="s_ipt" value="" maxlength="100"></span><span class="bg s_btn_wr"><input type="submit" id="su" value="百度count: 4096 err: <nil>一下" class="bg s_btn" onmousedown="this.className='bg s_btn s_btn_h'" onmouseout="this.className='bg s_btn'"></span><span class="tools"><span id="mHolder"><div id="mCon"><span>输入法</span></div><ul id="mMenu"><li><a href="javascript:;" name="ime_hw">手写</a></li><li><a href="javascript:;"name="ime_py">拼音</a></li><li class="ln"></li><li><a href="javascript:;" name="ime_cl">关闭</a></li></ul></span><span class="shouji"><strong>推荐&nbsp;:&nbsp;</strong><a href="http://w.x.baidu.com/go/mini/8/10000020" onmousedown="return ns_c({'fm':'behs','tab':'bdbrowser'})">百度浏览器,打开网页快2秒!</a></span></span></form></div><div id="content"><div id="u1"><a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a><a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a><a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a><a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a><a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">贴吧</a><a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_login" id="lb" onclick="return false;">登录</a><a href="//www.baidu.com/gaoji/preferences.html" name="tj_settingicon" id="pf">设置</a><a href="//www.baidu.com/more/" name="tj_briicon" id="bri">更多产品</a></div><div id="m"><p id="lg"><img src="//www.baidu.com/img/bd_logo.png" width="270" height="129"></p><p id="nv"><a href="http://news.baidu.com">新&nbsp;闻</a> <b>网&nbsp;页</b> <a href="http://tieba.baidu.com">贴&nbsp;吧</a> <a href="http://zhidao.baidu.com">知&nbsp;道</a> <a href="http://music.baidu.com">音&nbsp;乐</a> <a href="http://image.baidu.com">图&nbsp;片</a> <a href="http://v.baidu.com">视&nbsp;频</a> <a href="http://map.baidu.com">地&nbsp;图</a></p><div id="fm"><form id="form1" name="f1" action="/s" class="fm"><span class="bg s_ipt_wr"><input type="text" name="wd" id="kw1" maxlength="100" class="s_ipt"></span><input type="hidden" name="rsv_bp" value="0"><input type=hidden name=ch value=""><input type=hidden name=tn value="baidu"><input type=hidden name=bar value=""><input type="hidden" name="rsv_spt" value="3"><input type="hidden" name="ie" value="utf-8"><span class="bg s_btn_wr"><input type="submit" value="百度一下" id="su1" class="bg s_btn" onmousedown="this.className='bg s_btn s_btn_h'" onmouseout="this.className='bg s_btn'"></span></form><span class="tools"><span id="mHolder1"><div id="mCon1"><span>输入法</span></div></span></span><ul id="mMenu1"><div class="mMenu1-tip-arrow"><em></em><ins></ins></div><li><a href="javascript:;" name="ime_hw">手写</a></li><li><a href="javascript:;" name="ime_py">拼音</a></li><li class="ln"></li><li><a href="javascript:;" name="ime_cl">关闭</a></li></ul></div><p id="lk"><a href="http://baike.baidu.com">百科</a> <a href="http://wenku.baidu.com">文库</a> <a href="http://www.hao123.com">hao123</a><span>&nbsp;|&nbsp;<a href="//www.baidu.com/more/">更多&gt;&gt;</script></body></html>count: 0 err: EOFPS E:\golang\go_pro\src\safly>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 水插百合不开花怎么办 干百合冷水泡了怎么办 牡丹籽油过期了怎么办 ps画布建小了怎么办 腰突然疼的受不了了怎么办 微信里面打不开表格怎么办? 浏览器未正常加载相关控件怎么办 猫的眼睛发炎了怎么办 橡胶手机壳松了怎么办 橡胶手机壳小了怎么办 苹果手机下载不了软件了怎么办 苹果手机浏览器下载不了软件怎么办 小狗吃了硬的棉花怎么办 小狗吃了隔尿垫里的棉花怎么办 眼睫毛掉进眼睛里怎么办 爱掉头发怎么办吃什么 头皮屑多头发干燥脱发怎么办 剪了头发后悔了怎么办 2岁宝宝发际线高怎么办 脱发怎么办吃什么能长发 后面头发睡平了怎么办 鸟羽毛长得不好怎么办 吃激素药头发掉怎么办 吃了药头发掉怎么办 头皮痒头发掉的厉害怎么办 西昌学院被记过了怎么办? 初三了数学太差怎么办 板绘线条不流畅怎么办 嘴被风吹歪了怎么办 被风吹的嘴歪了怎么办 怀孕一个多月见红了怎么办 b本扣了6分怎么办 b牌驾驶证扣6分怎么办 忘记了谁考证的密码怎么办 专升本学校有课怎么办 跨境额度超了怎么办 微商代购被骗了怎么办 减肥到了瓶颈期该怎么办 大润发超市把一件商品打两件怎么办 小红书上买到假货怎么办 主动退市股票钱怎么办