0
点赞
收藏
分享

微信扫一扫

Go 基础语法3(Socket、httpserver)

萨摩斯加士奇 2022-04-22 阅读 79
golang

本篇概要:

10. Socket 服务端和客户端;

10.1 创建简单 Socket 服务端和客户端代码;

网络模型:
在这里插入图片描述
Socket

  • Socket 是对 TCP/UDP 封装后提供的一层接口
  • 利用Socket可以 编写服务端和客户端, 从而实现两者互连
  • 不同语言都有相似的 socket 接口支持
    在这里插入图片描述
  • 文件 /Users/go/src/com.net/myserver/main.go
package main

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

func main() {
	// 创建 socket
	lis,err := net.Listen("tcp", "127.0.01:8099")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer lis.Close()
	fmt.Println("创建监听成功,等待客户端连接")

	// 阻塞等待客户端连接
	client,err := lis.Accept()
	if err != nil {
		fmt.Println(err)
		return
	}
	defer client.Close()

	for {
		buf := make([]byte, 512)	//    如果是 8,则截断输出为:读取到8,内容是:i am pro读取到7,内容是:grammer
		n, err := client.Read(buf)
		if err != nil{
			if err == io.EOF{
				break
			}
			fmt.Println(err)
			return
		}
		fmt.Printf("读取到%d,内容是:%s",n,string(buf))
		// 创建监听成功,等待客户端连接
		// 读取到15,内容是:i am programmer
	}
}
  • 文件 /Users/go/src/com.net/myclient/main.go
package main

import (
	"fmt"
	"net"
)

func main() {
	conn,err := net.Dial("tcp","127.0.0.1:8099")
	if err != nil{
		fmt.Println(err)
		return
	}
	defer conn.Close()

	conn.Write([]byte("i am programmer"))
}

运行配置
在这里插入图片描述

10.2 "死循环"Socket服务端、支持浏览器输出;

举报

相关推荐

0 条评论