本篇概要:
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"))
}
运行配置