当前位置:实例文章 » 其他实例» [文章]Socket编程(go语言)

Socket编程(go语言)

发布人:shili8 发布时间:2024-11-08 15:55 阅读次数:0

**Socket 编程 (Go语言)**Socket 是一种用于进程间通信的 API,允许不同进程之间传递数据。Go语言提供了一个强大的 Socket 库,使得开发者可以轻松地创建网络应用。

### 一、Socket 基础####1. socket 类型Go语言中有四种基本的 Socket 类型:

* `TCP`(面向连接):保证数据传输的顺序和准确性。
* `UDP`(无连接):不保证数据传输的顺序和准确性,速度较快,但可能丢失数据。
* `Unix Domain Socket`:用于进程间通信,速度最快。

####2. socket 创建创建一个 Socket 的步骤如下:

go// TCP socketconn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
 log.Fatal(err)
}
defer conn.Close()

// UDP socketconn, err = net.DialIP("udp4://127.0.0.1:8080", nil)
if err != nil {
 log.Fatal(err)
}
defer conn.Close()

// Unix Domain Socketl, err := net.Listen("unixgram", "/tmp/sock")
if err != nil {
 log.Fatal(err)
}


### 二、Socket 通信####1. TCP socket 通信TCP socket 通信涉及到连接建立、数据传输和连接关闭。

go// serverfunc main() {
 l, err := net.Listen("tcp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 for {
 conn, err := l.Accept()
 if err != nil {
 log.Fatal(err)
 }
 go handleConn(conn) // 处理连接 }
}

func handleConn(conn net.Conn) {
 buf := make([]byte,1024)
 for {
 n, err := conn.Read(buf)
 if err != nil {
 return }
 log.Println(string(buf[:n]))
 }
}


go// clientfunc main() {
 conn, err := net.Dial("tcp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer conn.Close()

 buf := []byte("Hello, server!")
 _, err = conn.Write(buf)
 if err != nil {
 log.Fatal(err)
 }
}


####2. UDP socket 通信UDP socket 通信涉及到数据传输。

go// serverfunc main() {
 l, err := net.Listen("udp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 for {
 buf := make([]byte,1024)
 n, _, err := l.ReadFrom(buf)
 if err != nil {
 return }
 log.Println(string(buf[:n]))
 }
}


go// clientfunc main() {
 conn, err := net.Dial("udp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer conn.Close()

 buf := []byte("Hello, server!")
 _, err = conn.WriteTo(buf, nil)
 if err != nil {
 log.Fatal(err)
 }
}


####3. Unix Domain Socket 通信Unix Domain Socket 通信涉及到数据传输。

go// serverfunc main() {
 l, err := net.Listen("unixgram", "/tmp/sock")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 for {
 buf := make([]byte,1024)
 n, _, err := l.ReadFrom(buf)
 if err != nil {
 return }
 log.Println(string(buf[:n]))
 }
}


go// clientfunc main() {
 conn, err := net.Dial("unixgram", "/tmp/sock")
 if err != nil {
 log.Fatal(err)
 }
 defer conn.Close()

 buf := []byte("Hello, server!")
 _, err = conn.WriteTo(buf, nil)
 if err != nil {
 log.Fatal(err)
 }
}


### 三、Socket 错误处理Socket 错误处理涉及到错误类型和错误处理。

go// TCP socket 错误处理func main() {
 l, err := net.Listen("tcp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 for {
 conn, err := l.Accept()
 if err != nil {
 // 错误类型 switch err.(type) {
 case *net.OpError:
 log.Println("连接错误:", err)
 default:
 log.Println("其他错误:", err)
 }
 return }
 go handleConn(conn) // 处理连接 }
}


### 四、Socket 性能优化Socket 性能优化涉及到缓冲区大小和并发连接数。

go// TCP socket 性能优化func main() {
 l, err := net.Listen("tcp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 // 缓冲区大小 bufSize :=1024 *1024 for {
 conn, err := l.Accept()
 if err != nil {
 return }
 go handleConn(conn, bufSize) // 处理连接 }
}

func handleConn(conn net.Conn, bufSize int) {
 buf := make([]byte, bufSize)
 for {
 n, err := conn.Read(buf)
 if err != nil {
 return }
 log.Println(string(buf[:n]))
 }
}


### 五、Socket 安全性Socket 安全性涉及到连接验证和数据加密。

go// TCP socket 安全性func main() {
 l, err := net.Listen("tcp", "127.0.0.1:8080")
 if err != nil {
 log.Fatal(err)
 }
 defer l.Close()

 for {
 conn, err := l.Accept()
 if err != nil {
 return }
 go handleConn(conn) // 处理连接 // 连接验证 if !conn.SetDeadline(time.Now().Add(10 * time.Second)) {
 log.Println("连接超时")
 return }

 // 数据加密 cipher := &cipher.Stream{Stream: conn}
 go handleConn(cipher) // 处理加密数据 }
}

func handleConn(conn net.Conn) {
 buf := make([]byte,1024)
 for {
 n, err := conn.Read(buf)
 if err != nil {
 return }
 log.Println(string(buf[:n]))
 }
}


### 六、Socket 总结Socket 是一种用于进程间通信的 API,允许不同进程之间传递数据。Go语言提供了一个强大的 Socket 库,使得开发者可以轻松地创建网络应用。Socket 编程涉及到连接建立、数据传输和连接关闭,以及错误处理、性能优化和安全性等方面。通过掌握这些知识,开发者可以创建高效、安全的网络应用。

相关标签:golang后端开发语言
其他信息

其他资源

Top