
离线 TA的专栏
- 打卡等级:无名新人
- 打卡总天数:2
- 打卡月天数:0
- 打卡总奖励:16
- 最近打卡:2025-09-15 17:12:58
|
目录
- 1. 基本概念
- 2. TCP 套接字示例
- 3. UDP 套接字示例
- 4. 运行示例
- 总结
在 Go 语言中,使用标准库 来实现套接字编程。以下是有关 Go 套接字的基本概念和示例。
1. 基本概念
- 网络类型:
- TCP:流套接字,提供可靠的、面向连接的通信。
- UDP:数据报套接字,无连接,适用于快速传输。
2. TCP 套接字示例
服务器端代码
- package main
- import (
- "fmt"
- "net"
- )
- func main() {
- // 创建 TCP 套接字
- listener, err := net.Listen("tcp", ":12345")
- if err != nil {
- fmt.Println("Error starting server:", err)
- return
- }
- defer listener.Close()
- fmt.Println("Waiting for a connection...")
- for {
- // 接受连接
- conn, err := listener.Accept()
- if err != nil {
- fmt.Println("Error accepting connection:", err)
- continue
- }
- fmt.Println("Connection established from", conn.RemoteAddr())
- // 处理连接
- go handleConnection(conn)
- }
- }
- func handleConnection(conn net.Conn) {
- defer conn.Close()
- message := "Hello, Client!"
- conn.Write([]byte(message))
- fmt.Println("Message sent to client:", message)
- }
复制代码
客户端代码
- package main
- import (
- "fmt"
- "net"
- )
- func main() {
- // 连接到服务器
- conn, err := net.Dial("tcp", "localhost:12345")
- if err != nil {
- fmt.Println("Error connecting to server:", err)
- return
- }
- defer conn.Close()
- // 接收数据
- buffer := make([]byte, 1024)
- n, err := conn.Read(buffer)
- if err != nil {
- fmt.Println("Error reading from server:", err)
- return
- }
- fmt.Println("Received message from server:", string(buffer[:n]))
- }
复制代码 3. UDP 套接字示例
服务器端代码
- package main
- import (
- "fmt"
- "net"
- )
- func main() {
- // 创建 UDP 套接字
- address, err := net.ResolveUDPAddr("udp", ":12345")
- if err != nil {
- fmt.Println("Error resolving address:", err)
- return
- }
- conn, err := net.ListenUDP("udp", address)
- if err != nil {
- fmt.Println("Error listening:", err)
- return
- }
- defer conn.Close()
- fmt.Println("Waiting for a connection...")
- for {
- buffer := make([]byte, 1024)
- n, addr, err := conn.ReadFromUDP(buffer)
- if err != nil {
- fmt.Println("Error reading from UDP:", err)
- continue
- }
- fmt.Println("Received message from", addr, ":", string(buffer[:n]))
- // 发送响应
- response := []byte("Hello, UDP Client!")
- conn.WriteToUDP(response, addr)
- }
- }
复制代码 客户端代码
- package main
- import (
- "fmt"
- "net"
- )
- func main() {
- // 发送 UDP 数据包
- address, err := net.ResolveUDPAddr("udp", "localhost:12345")
- if err != nil {
- fmt.Println("Error resolving address:", err)
- return
- }
- conn, err := net.DialUDP("udp", nil, address)
- if err != nil {
- fmt.Println("Error connecting:", err)
- return
- }
- defer conn.Close()
- message := []byte("Hello, Server!")
- conn.Write(message)
- // 接收响应
- buffer := make([]byte, 1024)
- n, _, err := conn.ReadFromUDP(buffer)
- if err != nil {
- fmt.Println("Error reading from server:", err)
- return
- }
- fmt.Println("Received message from server:", string(buffer[:n]))
- }
复制代码 4. 运行示例
- 首先在一个终端中运行服务器代码。
- 然后在另一个终端中运行客户端代码。
总结
Go 语言的 包使得套接字编程变得简单而高效。通过使用 TCP 或 UDP 套接字,你可以轻松实现网络通信。
到此这篇关于golang套接字的实现的文章就介绍到这了,更多相关golang套接字内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|