【Go】网络编程、Redis

1 TCP编程

1.1 C/S模型
// 查看本机所有端口信息
netstat -an
// 查看所有端口 pid
netstat -anb

C/S模型

Server

package main

import (
	"fmt"
	"io"
	"net"
)

func doProcess(conn net.Conn)  {
   
	// 延时关闭连接
	defer conn.Close()

	for{
   
		// 创建切片用于读取数据
		buf := make([]byte, 1024)
		// case1 阻塞在此处 等待读取数据
		// case2 客户端关闭或者读取出错 err
		//fmt.Printf("server wait client ip[%s] write something..\n", conn.RemoteAddr().String())
		n, err := conn.Read(buf)
		if err == io.EOF{
   
			fmt.Printf("conn.Read close: %s\n", err)
			break
		}else if err != nil{
   
			fmt.Printf("conn.Read err : %s\n", err)
			break
		}

		// 显示实际读取的内容
		fmt.Printf("read byte[%d] info[%s]\n", n, string(buf[:n]))

		// 判断退出的程序
		if n == 4 && "exit" == string(buf[:n]){
   
			fmt.Printf("[Exit] gorutine\n")
			break
		}
	}

}

func main() {
   
	// [1] 监听端口
	listen, err := net.Listen("tcp", "192.168.19.1:8888")
	fmt.Println("[1] 监听端口 192.168.19.1:8888...")
	if err != nil{
   
		fmt.Printf("Listen err : %s\n", err)
		return
	}
	// 延时关闭
	defer listen.Close()

	// listen type : *net.TCPListener  val : &{0xc042090000}
	fmt.Printf("listen type : %T  val : %v\n", listen, listen) 

	// [2] 阻塞等待客户端连接
	for{
   
		fmt.Println("[2] 阻塞等待客户端连接 192.168.19.1:8888...")
		conn, err := listen.Accept()
		if err != nil{
   
			fmt.Printf("Accept err : %s\n", err)
			continue
		}

		// conn type : *net.TCPConn  val : &{
   {0xc04207a240}}
		fmt.Printf("conn type : %T  val : %v\n", conn, conn)
		// conn client ip: 192.168.19.1:13749  server ip: 192.168.19.1:8888
		fmt.Printf("conn client ip: %s  server ip: %s\n", conn.RemoteAddr()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值