网络编程
讲解网络基础知识、实践网络编程
国际渣男
这个作者很懒,什么都没留下…
展开
-
网络代理【4】ReverseProxy源码分析及使用
真机侧package maintype RealServer struct { Addr string}func NewRealServer(addr string) *RealServer { return &RealServer{Addr: addr}}func (r *RealServer) HelloHandler(w http.ResponseWriter, req *http.Request) { //127.0.0.1:8008/abc?sdsdsa=11 .原创 2020-07-25 12:05:33 · 4683 阅读 · 0 评论 -
网络代理【3】Golang实现简单的反向代理
理解HTTP服务器工作原理如何接收请求如何定位资源如何应答客户端理解TCP协议、HTTP协议TCP协议的原理和基于TCP协议的编程HTTP协议的原理和报文结构1 传输层TCP协议1.1 了解TCP协议TCP(Transmission Control Protocol:传输控制协议)TCP协议是计算机网络中非常复杂的一个协议特点:TCP协议的可靠传输:在复杂的网络环境中...原创 2021-04-11 11:47:27 · 4124 阅读 · 0 评论 -
网络代理【5】代理实现4种负载均衡策略
一、服务器端step1.1 监听服务器1.2 循环读取消息内容1.3 回复数据二、客户端step2.1 连接服务器2.2 发送数据2.3 接收数据原创 2021-04-11 20:45:46 · 3815 阅读 · 0 评论 -
网络代理【1】什么是网络代理
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa9’ in position 122257: illegal multibyte sequence解决办法:一:由于没有指定源码的解码方式:原创 2021-04-10 22:40:46 · 8073 阅读 · 0 评论 -
网络代理【2】Golang实现简单的正向代理
package mainimport ( "fmt" "io" "net" "net/http" "strings")// Pxy ServerHTTP方法绑定的对象type Pxy struct{}// ServerHTTP 实现http.Handler接口中的方法func (p *Pxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { fmt.Printf(`Received request {"Method"原创 2020-07-25 11:53:30 · 4705 阅读 · 0 评论 -
网络代理【6】TCP代理,代理Redis服务
前置文章:【TCP服务器】仿http.server源码实现服务与逻辑分离本文是在以上文章的TCP Handler改写实现步陬:代理实现Handler方法连接下游服务设置退出时关闭链接双工读写package proxyimport ( "context" "gateway/proxy/lbalance" "io" "log" "net" "time")// TCPReverseProxy TCP反向代理type TCPReverseProxy struct { .原创 2021-05-05 15:58:21 · 244 阅读 · 0 评论 -
网络和操作系统高频问题
持续整理更新中https://bbs.gameres.com/thread_842984_1_1.html一、TCP为什么是三次握手?1、TCP是面向连接:双方需证明彼此有收发能力。第一次握手,客户端发送SYN连接请求,服务端收到后仅能判断客户端有发送能力;第二次握手,服务端发送ACK,证明服务端有接受和发送能力;第三次握手,客户端发送ACK包,证明客户端有接受能力。2、防止失效链接传送给服务端:当客户端发送SYN包后,此包在网络节点发生滞留,在客户端重新发包建立连接并释放后到达服务端,服务端.原创 2021-08-29 23:34:28 · 569 阅读 · 0 评论 -
【TCP服务器】仿http.server源码实现服务与逻辑分离
一、HTTP服务的创建和原理图import "net/http"func main(){ // 逻辑 mux := http.NewServeMux() mux.HandleFunc("/hello", func(rw http.ResponseWriter, req *http.Request) { rw.Write([]byte("welcome")) }) // 服务 server := http.Server{ Addr: "192.168.27.128:80原创 2021-05-04 16:03:15 · 340 阅读 · 0 评论 -
网络编程【6】Golang实现HTTP 服务端和客户端
目录:一、HTTP服务器: - 创建路由器 - 设置路由规则 - 创建服务器 - 监听端口并提供服务二、HTTP客户端: - 创建连接池 - 创建客户端 - 请求资源(简单请求、携带header请求、携带body请求) - 读取内容三、http服务器源码分析: - mux为何能作为http.Server的Handler参数? - 自定义路由器三、http客户端transport分析:一、HTTP服务器var addr string = "172.?.?.249:8888"原创 2021-04-10 21:03:00 · 4467 阅读 · 0 评论 -
网络编程【5】Golang创建TCP服务器和客户端
目录:一: TCP Server - 监听端口(获取链接请求) - 有链接请求创建套接字 - 对套接字进行处理二: TCP Client - 创建socket套接字 - 用户输入消息数据 - 将消息写入套接字 - 销毁socket三: 抓包分析四: 消息格式的重要性一、TCP Serverfunc process(conn net.Conn) { defer conn.Close() // 不关闭的话,服务端会处于CLOSE—WAIT状态,最后被当做异常发送R包(Reset)原创 2021-04-10 15:30:44 · 4169 阅读 · 0 评论 -
网络编程【4】Golang创建UDP服务器和客户端
目录:- 一、为何UDP不需要listen:- 二、服务端: - 1.建立套接字 - 2.对套接字操作 - 循环读取数据 - 回复消息- 三、客户端: - 1.连接服务器 - 2.写入数据 - 3.读取消息一、为何UDP不需要listenlisten()是进入监听状态,表示愿意接收连接请求。accept()是接受新连接。listen之后有连接请求就将其放到队列中,accept()时把新连接请求从队列中取出,建立新的socket。UDP无法保证数据安全原创 2021-04-05 11:56:21 · 4716 阅读 · 1 评论 -
网络编程【3】通过网络套接字操作引出接口作用
目录:- 引出问题- 类比举例- 总结1、引出问题: 为什么conn可以作为io.writer/io.reader参数进行读取?io.write有write方法接口type Writer interface { Write(p []byte) (n int, err error)}net.dial返回的conn也具有write方法接口type Conn interface { Read(b []byte) (n int, err error) Write(b []byte) (n原创 2021-04-05 10:17:59 · 3868 阅读 · 0 评论 -
网络编程【2】自定义消息格式实现装包与拆包
func main(){ // 类比接收缓冲区}原创 2021-04-04 11:45:33 · 3982 阅读 · 0 评论 -
网络编程【1】网络基础协议
OSI七层网络协议经典协议与数据包三次握手与四次挥手TCP拥塞控制为啥会出现粘包、拆包,如何处理?基于golang实现TCP、UDP、Http服务端与客户端原创 2020-06-01 16:03:08 · 3680 阅读 · 0 评论