ZBLOG

golang建立物理层网络通信代码示例

以下是一个简单的示例,展示了如何使用Golang建立物理层网络通信:

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	host := "127.0.0.1" // 本地主机IP地址
	port := 8080       // 端口号

	// 创建TCP监听器
	listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", host, port))
	if err != nil {
		log.Fatalf("无法监听端口:%v", err)
	}

	defer listener.Close()

	fmt.Printf("正在监听 %s:%d\n", host, port)

	for {
		conn, err := listener.Accept() // 接受连接请求
		if err != nil {
			log.Fatalf("无法接受连接:%v", err)
		}

		go handleConnection(conn) // 启动一个goroutine处理每个连接
	}
}

func handleConnection(conn net.Conn) {
	defer conn.Close()

	fmt.Printf("接收到新连接: %v\n", conn.RemoteAddr())

	buffer := make([]byte, 1024)

	for {
		n, err := conn.Read(buffer) // 从客户端读取数据
		if err != nil {
			log.Printf("读取错误:%v", err)
			break
		}

        if n == 0{
            break // 如果没有读取到任何数据,表示客户端已关闭连接
        }
        
        data := buffer[:n]
        fmt.Printf("接收到数据:%s\n", string(data))

        response := []byte("已收到你的消息") 
        _,err = conn.Write(response) // 发送响应给客户端
        
        if err != nil{
            log.Printf("写入错误:%v",err)
            break
        }
	}
}

这个示例使用net包创建了一个TCP监听器,通过指定本地主机IP地址和端口号进行监听。然后,每当有新的连接请求时,会启动一个goroutine来处理该连接。在处理连接的goroutine中,它会不断从客户端读取数据,并将收到的数据打印出来。然后,它会向客户端发送一个响应消息。如果发生任何错误或客户端关闭连接,循环将退出。

请注意,这只是一个简单示例,并未考虑错误处理、并发性能优化以及其他更复杂的网络通信场景。在实际开发中,您可能需要根据具体需求对代码进行修改和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14276

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?