【Hello Go】Go语言网络编程

Go语言网络编程

有关网络的基本知识我之前的博客介绍的很详细 这里就不再赘述了 这里主要讲解下Go语言网络编程的语法

网络基础

协议

Go语言程序

我们建立一个tcp链接的步骤为 socket bind listen accept 但是在Go语言中 我们并不需要前两步 并且listen 和 accept的结构都嵌入到了 net 网络包当中 所以说我们只需要调用net包即可

服务端

go 复制代码
package main

import (
	"fmt"
	"net"
	"strings"
)

func dealcoon(coon net.Conn) {
	// 接收到链接之后我们开始接受数据
	defer coon.Close() // 在这个函数结束的时候 我们关闭链接套接字

	ipaddress := coon.RemoteAddr().String()
	fmt.Println("新的链接已获得 ip地址为", ipaddress)
	buf := make([]byte, 1024) // 开辟一个新的缓冲区来接受用户的数据

	for { // 阻塞等待用户发送的数据
		n, err := coon.Read(buf) // 从链接中读取数据 相当于像buf中写入数据  n为读取的长度
		if err != nil {
			fmt.Println("conn read error")
			break
		} // 读取失败 出现了某些问题

		// 走到这里表示读取成功 读取了n个字节的数据 我们进行切片截取 只截取有效数据
		result := buf[:n]

		// 如果对方发送了exit 直接退出
		if "exit" == string(result) {
			println("收到退出信号 直接退出")
			return
		}

		// 如果是其他的数据 我们将数据大写之后返回给客户端
		coon.Write([]byte(strings.ToUpper(string(result))))
	}

}

func main() {
	// 首先创建一个监听套接字
	listener, err := net.Listen("tcp", "127.0.0.1")
	if err != nil {
		println("listen error ")
		return
	}

	defer listener.Close()

	// 因为我们的tcp程序需要不断的accept新数据 所以说这里要使用一个for循环

	for {
		//
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("accept error")
			break
		} // 跑到这里说明我们套接字的listen出现了错误

		// 这里直接分出一个协程去处理其他问题
	}
}

客户端

go 复制代码
package main

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

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1")
	if err != nil {
		log.Fatal("conn error")
	} // 链接失败

	// 到这里就是链接成功了
	for {
		fmt.Println("请输入你要发送的数据")
		buf := make([]byte, 1024)
		fmt.Scan(&buf)

		// 向服务器发送数据
		conn.Write(buf)

		// 接受服务器的数据并打印出来
		n, err2 := conn.Read(buf) 
		if err2!= nil {
			fmt.Println("出现读取错误了") 
			break
		}
		
		  // 截取有效长度的字节
		  result := buf[:n] 
		  fmt.Println(string(result))
	}
}

Http程序

有关http协议我之前的博客介绍的很详细 大家如果想了解可以参考我的这几篇博客 Http协议详解

我们写Http服务端程序时 需要包含 net/http

之后的使用方法如下

  • 首先我们需要注册带有 func(w http.ResponseWriter, r *http.Requests)签名的函数
  • 其中 w 用来给客户端发送各种数据 r用来获取各个参数
  • 之后我们选择使用 http.HandleFunc("/go", myHandler) 函数来注册各个url对应的处理函数
  • 最后我们指定ip和端口进行监听即可 代码如下 http.ListenAndServe("127.0.0.1:8000", nil)

我们写Http客户端程序时 需要包含 net/http

这里的步骤就更简单了

  • 直接使用 http.Get("http://127.0.0.1:8000/go") 函数 指定我们需要的url即可

之后就是对于数据业务的处理了 此处省略

相关推荐
REDcker4 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
止语Lab5 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
REDcker6 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
ACP广源盛139246256736 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
Empty-Filled7 小时前
AI生成测试用例功能怎么测:一个完整实战案例
网络·人工智能·测试用例
码云数智-大飞8 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
我不是8神8 小时前
面试题:runtime.MAXPROCESS怎么处理?
golang
jinanwuhuaguo8 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw
必胜刻8 小时前
全面解析 Token:从入门到 JWT 实战
golang·状态模式·web·前后端交互
等风来不如迎风去8 小时前
【win11】最佳性能:fix 没有壁纸,一直黑屏
网络·人工智能