当前位置: 首页 > news >正文

【Go语言】基于Socket编程的P2P通信程序示例

Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库,如net包,开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单,能够轻松处理多个连接和数据交换。使用Go语言进行Socket编程,开发者可以初始化和监听端口,接受连接请求,建立直接的点对点通信通道,并在不同节点之间进行数据传输。这种方式使得开发者能够构建出鲁棒、高性能的P2P通信应用,同时充分利用了Go语言在并发编程方面的优势。

“P2P"代表"点对点”(Peer-to-Peer)的缩写,它是一种网络通信和数据共享模式。在传统的客户端-服务器模型中,计算机系统(客户端)通过向中央服务器请求数据来进行通信和数据交换。而在P2P模型中,计算机之间可以直接相互连接,共享资源和信息,而无需依赖一个中央服务器。

P2pimg.drawio

player1.go

package mainimport ("bufio""fmt""net""os"
)func handleIncomingMessages(conn net.Conn) {scanner := bufio.NewScanner(conn)for scanner.Scan() {text := scanner.Text()fmt.Printf("Received from Player 2: %s\n", text)}
}func main() {// player1做服务端监听listener, _ := net.Listen("tcp", "127.0.0.1:9001")defer listener.Close()fmt.Println("Player 1 waiting for a match on 127.0.0.1:9001")conn, _ := listener.Accept()defer conn.Close()fmt.Println("Player 1 connected to Player 2")// player1的接收go handleIncomingMessages(conn)// player1的发送scanner := bufio.NewScanner(os.Stdin)for scanner.Scan() {text := scanner.Text()fmt.Fprintf(conn, "%s\n", text)}
}

player2.go

package mainimport ("bufio""fmt""net""os"
)func handleIncomingMessages(conn net.Conn) {scanner := bufio.NewScanner(conn)for scanner.Scan() {text := scanner.Text()fmt.Printf("Received from Player 1: %s\n", text)}
}func main() {// player2做客户端连接服务端conn, _ := net.Dial("tcp", "127.0.0.1:9001")defer conn.Close()fmt.Println("Player 2 connected to Player 1")// player2的接收go handleIncomingMessages(conn)// player2的发送scanner := bufio.NewScanner(os.Stdin)for scanner.Scan() {text := scanner.Text()fmt.Fprintf(conn, "%s\n", text)}
}
for scanner.Scan() {text := scanner.Text()fmt.Fprintf(conn, "%s\n", text)}
}
http://www.lryc.cn/news/139947.html

相关文章:

  • 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)
  • Java代码优化案例2:使用HashMap代替List进行数据查找
  • 每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)
  • SQL SERVER 日期函数相关内容
  • 多维时序 | MATLAB实现SCNGO-BiGRU-Attention多变量时间序列预测
  • 从零开始学习 Java:简单易懂的入门指南之JDK8时间相关类(十八)
  • Spring Boot实践八--用户管理系统(下)
  • C语言入门 Day_10 判断的进阶
  • 机器学习基础13-基于集成算法优化模型(基于印第安糖尿病 Pima Indians数据集)
  • Rancher部署k8s集群
  • 前端油猴脚本开发小技巧笔记
  • 软考高级系统架构设计师系列之:搭建论文写作的万能模版
  • 多线程常见面试题
  • Java接收json参数
  • 赤峰100吨每天医院污水处理设备产品特点
  • nodejs+vue+elementui健身房教练预约管理系统nt5mp
  • 视频分割合并工具说明
  • 2023java面试深入探析Nginx的处理流程
  • Java的锁大全
  • Leetcode80. 删除有序数组中的重复项 II
  • 电脑显示“Operating System not found”该怎么办?
  • 简析SCTP开发指南
  • 把Android手机变成电脑摄像头
  • Linux线程篇(中)
  • 深度学习优化入门:Momentum、RMSProp 和 Adam
  • LeetCode 面试题 01.09. 字符串轮转
  • 系统上线安全测评需要做哪些内容?
  • vue 中 axios 的安装及使用
  • 数据结构——线性数据结构(数组,链表,栈,队列)
  • 多态(C++)