您现在的位置是:首页 > 学习笔记 > Go语言Go语言

Golang之网络编程

冰山2019-02-25【Go语言】人已围观

简介1.协议
1.1协议
1.2典型协议
2.层与协议
2.1分层方式
3.通信过程
4.Socket编程
5.网络应用程序设计模式
5.1模式介绍
5.2优缺点
6.TCP通信 C/S模型通信
7.UDP通信 C/S模型通信
8.TCP通信并发C/S模型通信
9.UDP通信并发C/S模型通信
10.UDP与TCP的差异


Read(b []byte) (n int, err error)
Write(b []byte) (n int, err error)
Close() error
LocalAddr() Addr
RemoteAddr() Addr
SetDeadline(t time.Time) error
SetReadDeadline(t time.Time) error
SetWriteDeadline(t time.Time) error
}

可参考https://studygolang.com/pkgdoc 中文帮助文档。


示例代码:
package main

import (
   "net"
   "fmt"
)

func main() {
  listen,err:=net.Listen("tcp","127.0.0.1")
   if err!=nil{
       fmt.Println("listen err",err)
       return
   }
   conn,err:=listen.Accept()
   if err!=nil{
       fmt.Println("listen err",err)
       return
   }
   buf:=make([]byte,4096)
   n,err:=conn.Read(buf)
   if err!=nil{
       fmt.Println("read err",err)
       return
   }
   fmt.Println("收到客户端发来的数据",string(buf[n]))
}

如图,在整个通信过程中,服务器端有两个socket参与进来,但用于通信的只有 conn 这个socket,它是由 listener创建的,隶属于服务器端。


6.2 TCP通信 Client 端:


Dial函数:func Dial(network, address string) (Conn, error)
network:选用的协议:TCP、UDP,如:“tcp”或 “udp”
address:服务器IP地址+端口号, 如:“121.36.108.11:8000”或 “www.itcast.cn:8000”

Conn 接口:
type Conn interface {
Read(b []byte) (n int, err error)
Write(b []byte) (n int, err error)
Close() error
LocalAddr() Addr
RemoteAddr() Addr
SetDeadline(t time.Time) error
SetReadDeadline(t time.Time) error
SetWriteDeadline(t time.Time) error
}


示例代码:
package main

import (
   "net"
   "fmt"
)

func main() {
  conn,err:=net.Dial("tcp","127.0.0.1")
  if err!=nil{
   fmt.Println("dial err",err)
   return
  }
  defer conn.Close()

  _,err=conn.Write([]byte("客户端发出的信息"))
  if err!=nil{
   fmt.Println("write err",err)
   return
  }
 

7.UDP通信 C/S模型通信

 

7.1UDP通信 Server端

 

由于UDP是“无连接”的,所以,服务器端不需要额外创建监听套接字,只需要指定好IP和port,然后监听该地址,等待客户端与之建立连接,即可通信。

创建监听地址:func ResolveUDPAddr(network, address string) (*UDPAddr, error)
创建用户通信的socket:func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
接收udp数据:func (c *UDPConn) ReadFromUDP(b []byte) (int, *UDPAddr, error)
写出数据到udp:func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)

package main

import (
   "net"
   "fmt"
)

func main() {
   addr, err := net.ResolveUDPAddr("udp", "127.0.0.1")
   if err != nil {
      fmt.Println("resolveaddr err", err)
      return
   }
   conn,err:=net.ListenUDP("udp",addr)

 4/7   首页 上一页 2 3 4 5 6 7 下一页 尾页

  • 微信扫一扫~
  • 支付宝扫一扫~

很赞哦! ()

上一篇:Go并发

下一篇:微服务(microservices)

相关文章

文章评论

本站推荐