go 写 TCP 服务端/客户端 基础 :goland 学习记录(1)
- 关于:go 语言 :Socket TCP
- 服务端代码
- 客户端代码
- 效果
- 源码
关于:go 语言 :Socket TCP
使用 go 语言写 TCP 服务端和客户端,最核心的就是 net 这个包。
我们使用这个包,就可以做 TCP 开发了
服务端代码
/*
* Copyright(C),2019-2020,
* Author: dao
* Version: 1.0.0
* Date: 2021/6/11 16:35
* Description:
*
*/
package main
import (
"fmt"
"io"
"log"
"net"
"time"
)
func main() {
//使用协议是tcp,监听的地址是port
listener, err := net.Listen("tcp", ":10001")
if err != nil {
fmt.Println("错误:"+"使用协议是tcp,监听 出错。", "server")
log.Fatal(err)
}
//关闭监听的端口
defer listener.Close()
fmt.Println("准备开始侦听")
for {
//用conn接收链接
conn, err := listener.Accept()
if err != nil {
fmt.Println("错误:"+"用conn接收链接 出错。", "server")
log.Fatal(err)
}
//定义一个切片
buf := make([]byte, 1024, 1024)
//接收到的内容大小。
n, err := conn.Read(buf)
if err != nil && err != io.EOF {
//对方断开连接。
fmt.Println("错误:"+"对方断开连接。", "server")
fmt.Println("错误:"+err.Error(), "server")
log.Fatal(err)
}
data := string(buf[0:n])
fmt.Println("收到:" + data)
fmt.Println("(回包)服务端收到:" + data)
conn.Write([]byte("(回包)服务端收到:" + data)) //通过conn的wirte方法将这些数据返回给客户端。
//在结束这个链接之前需要睡 1 秒钟,再结束当前循环。
time.Sleep(1 * 1e9)
fmt.Println("准备与客户端断开连接:已休息:"+fmt.Sprintf("%d 秒", 1), "server")
//准备与客户端断开连接。
conn.Close()
}
}
客户端代码
/*
* Copyright(C),2019-2020,
* Author: dao
* Version: 1.0.0
* Date: 2021/6/11 16:43
* Description:
*
*/
package main
import (
"fmt"
"io"
"log"
"net"
)
func main() {
//使用协议是tcp,拨号。
conn, err := net.Dial("tcp", ":10001")
if err != nil {
fmt.Println("错误:"+err.Error(), "server")
log.Fatal(err)
return
}
fmt.Println("访问IP地址是:", conn.RemoteAddr().String())
fmt.Printf("客户端链接的地址及端口是:%v\n", conn.LocalAddr())
//向服务端发送数据
n, err := conn.Write([]byte("你好,我叫 daolizhe "))
if err != nil {
fmt.Println("错误:"+err.Error(), "server")
log.Fatal(err)
return
}
fmt.Println("向服务端发送的数据大小是:", n)
//定义一个切片
buf := make([]byte, 1024, 1024)
//接收到的内容大小。
n, err = conn.Read(buf)
if err != nil && err != io.EOF {
//对方断开连接
fmt.Println("错误:"+err.Error(), "server")
log.Fatal(err)
return
}
//将回包的内容打印出来。
fmt.Println(string(buf[:n]))
//断开TCP链接。
conn.Close()
}
效果
服务端效果如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yM3cTN3QTMxEzN2I2Y4IjMzYzXwUzMyATM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)