server.go
//模拟server端
func main() {
tcpServer, _ := net.ResolveTCPAddr("tcp4", ":8080")
listener, _ := net.ListenTCP("tcp", tcpServer)
for {
//当有新的客户端请求来的时候,拿到与客户端的连接
conn, err := listener.Accept()
if err != nil {
fmt.Println(err)
continue
}
//处理逻辑
go handle(conn)
}
}
func handle(conn net.Conn) {
defer conn.Close()
//读取客户端传送的消息
go func() {
response, _ := ioutil.ReadAll(conn)
fmt.Println(string(response))
}()
//向客户端发送消息
time.Sleep(1 * time.Second)
now := time.Now().String()
conn.Write([]byte(now))
}
package main
import (
"bufio"
"fmt"
"io"
"net"
)
func main() {
// 使用tcp 协议 监听本机 8080端口
list, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("网络监听失败!")
fmt.Println(err)
}
//记得要关闭
defer list.Close()
for {
//等待链接 如果有链接过来的的话 会赋值给 c ,err
c, err := list.Accept()
if err != nil {
fmt.Println("错误的链接")
}
//有可能会有多个请求发送过来 所以这里用并行的方式
go Handle(c)
}
}
func Handle(conn net.Conn) {
defer conn.Close()
//创建一个缓冲*Reader 并读取对应的数据
data, err := bufio.NewReader(conn).ReadString('\n')
//如果数据读取完 err 会变成 EOF 这个并不是 错误。
if err != nil && err != io.EOF {
fmt.Println(err.Error())
}
fmt.Println(data)
}
client.go
//模拟客户端
func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0])
}
//获取命令行参数 socket地址
server := os.Args[1]
addr, err := net.ResolveTCPAddr("tcp4", server)
checkError(err)
//建立tcp连接
conn, err := net.DialTCP("tcp4", nil, addr)
checkError(err)
//向服务端发送数据
_, err = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
checkError(err)
//接收响应
response, _ := ioutil.ReadAll(conn)
fmt.Println(string(response))
os.Exit(0)
}
func checkError(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
package main
import (
"fmt"
"net"
"os"
)
func main() {
//通过tcp 协议链接 本机 8080端口
con, err := net.Dial("tcp", "127.0.0.1:8080")
//如果出现错误 说明链接失败
if err != nil {
fmt.Println("连接服务器端失败")
fmt.Println(err.Error())
os.Exit(0)
}
//记得关闭
defer con.Close()
//开始向服务器端发送 hello
num, write_err := con.Write([]byte("hello"))
//如果写入有问题 输出对应的错误信息
if write_err != nil {
fmt.Println(write_err.Error())
}
//如果没有问题。显示对应的写入长度
fmt.Println(num)
}