今天我们从最简单的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 也被处理为一种特殊的文件