UDP服务端使用Go语言的net包实现的UDP服务端代码如下:
// UDP/server/main.go// UDP server端func main() {listen, err := net.ListenUDP("udp", &net.UDPAddr{IP:net.IPv4(0, 0, 0, 0),Port: 30000,})if err != nil {fmt.Println("listen failed, err:", err)return}defer listen.Close()for {var data [1024]byten, addr, err := listen.ReadFromUDP(data[:]) // 接收数据if err != nil {fmt.Println("read udp failed, err:", err)continue}fmt.Printf("data:%v addr:%v count:%v\n", string(data[:n]), addr, n)_, err = listen.WriteToUDP(data[:n], addr) // 发送数据if err != nil {fmt.Println("write to udp failed, err:", err)continue}}}
UDP客户端使用Go语言的net包实现的UDP客户端代码如下:
// UDP 客户端func main() {socket, err := net.DialUDP("udp", nil, &net.UDPAddr{IP:net.IPv4(0, 0, 0, 0),Port: 30000,})if err != nil {fmt.Println("连接服务端失败,err:", err)return}defer socket.Close()sendData := []byte("Hello server")_, err = socket.Write(sendData) // 发送数据if err != nil {fmt.Println("发送数据失败,err:", err)return}data := make([]byte, 4096)n, remoteAddr, err := socket.ReadFromUDP(data) // 接收数据if err != nil {fmt.Println("接收数据失败,err:", err)return}fmt.Printf("recv:%v addr:%v count:%v\n", string(data[:n]), remoteAddr, n)}
五 http编程web工作流程Web服务器的工作原理可以简单地归纳为:
- 客户机通过TCP/IP协议建立到服务器的TCP连接
- 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
- 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
- 客户机与服务器断开 。由客户端解释HTML文档,在客户端屏幕上渲染图形结果
HTTP服务端
package mainimport ("fmt""net/http")func main() {//http://127.0.0.1:8000/go// 单独写回调函数http.HandleFunc("/go", myHandler)//http.HandleFunc("/ungo",myHandler2 )// addr:监听的地址// handler:回调函数http.ListenAndServe("127.0.0.1:8000", nil)}// handler函数func myHandler(w http.ResponseWriter, r *http.Request) {fmt.Println(r.RemoteAddr, "连接成功")// 请求方式:GET POST DELETE PUT UPDATEfmt.Println("method:", r.Method)// /gofmt.Println("url:", r.URL.Path)fmt.Println("header:", r.Header)fmt.Println("body:", r.Body)// 回复w.Write([]byte("www.5lmh.com"))}
HTTP服务端package mainimport ("fmt""io""net/http")func main() {//resp, _ := http.Get("http://www.baidu.com")//fmt.Println(resp)resp, _ := http.Get("http://127.0.0.1:8000/go")defer resp.Body.Close()// 200 OKfmt.Println(resp.Status)fmt.Println(resp.Header)buf := make([]byte, 1024)for {// 接收服务端信息n, err := resp.Body.Read(buf)if err != nil && err != io.EOF {fmt.Println(err)return} else {fmt.Println("读取完毕")res := string(buf[:n])fmt.Println(res)break}}}
六 WebSocket编程webSocket是什么- WebSocket是一种在单个TCP连接上进行全双工通信的协议
- WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据
- 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
- 需要安装第三方包:cmd中:go get -u -v github.com/gorilla/websocket
经验总结扩展阅读
- gorm中的关联操作详解
- 甲亢病人可以汗蒸吗
- OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构
- 颈椎和胸椎痛怎么办
- 山芹菜饺子最正宗的做法
- 世界上的五大人种
- 巧克力钵仔糕的做法
- 不为所动的名言
- 泡鲁达怎么吃
- 怎么做好吃又美味的饮料