今天我们从最简单的socket编程入门,首先我们来熟悉以下三个关键信息
- Listen ,监控指定的IP和端口
- Accept ,等待客户端连接
- read/write,从连接中读取或者写入数据
现在我们从一个最简单的代码示例来熟悉
package main
/*
* socket的hello world
* 无论客户端发送任何消息,服务端都回复hello world
*/
import (
"bufio"
"fmt"
"net"
"strings"
)
func DealConn(conn net.Conn) {
// 处理完关闭连接
defer conn.Close()
fmt.Println("new conn\n")
// 针对当前连接做发送和接受操作
for {
reader := bufio.NewReader(conn)
// 读取字符串, 直到碰到回车返回
str, err := reader.ReadString('\n')
// 数据读取正确
if err == nil {
// 去掉字符串尾部的回车
str = strings.TrimSpace(str)
// 回复消息
conn.Write([]byte("hello world\n"))
} else {
break
}
}
}
func main() {
// 建立tcp 服务
listen, err := net.Listen("tcp", "0.0.0.0:1215")
if err != nil {
fmt.Printf("listen failed, err:%v\n", err)
return
}
for {
// 等待客户端建立连接
fmt.Printf("accept conn ...... \n")
conn, err := listen.Accept()
if err != nil {
fmt.Printf("accept failed, err:%v\n", err)
continue
}
// 启动一个单独的 goroutine 去处理连接
go DealConn(conn)
}
}
这个代码示例,就是启动一个监控1215的监听程序,无论谁都可以来连接,无论连接方输入什么内容,都是回复”hello world“.

Pingback 引用通告: socket分享目录 | 你好,欢迎来到老张的博客,张素杰
Socket是对TCP/IP 协议族的一种封装,是应用层与TCP/IP协议族通信的中间软件抽象层
Socke是一种网络间不同计算机上的进程通信的一种方法,利用三元组(ip地址,协议,端口)就可以唯一标识网络中的进程,网络中的进程通信可以利用这个标志与其它进程进行交互。
Socket起源于Unix,Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开(open) –> 读写(write/read) –> 关闭(close)”模式来进行操作因此 Socket 也被处理为一种特殊的文件