golang的socket的hello world

今天我们从最简单的socket编程入门,首先我们来熟悉以下三个关键信息

  1. Listen ,监控指定的IP和端口
  2. Accept ,等待客户端连接
  3. 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“.

此条目发表在 好文推荐, 网站开发 分类目录,贴了 标签。将固定链接加入收藏夹。

golang的socket的hello world》有 4 条评论

  1. Pingback 引用通告: socket分享目录 | 你好,欢迎来到老张的博客,张素杰

  2. xtgxiso 说:

    Socket是对TCP/IP 协议族的一种封装,是应用层与TCP/IP协议族通信的中间软件抽象层

  3. xtgxiso 说:

    Socke是一种网络间不同计算机上的进程通信的一种方法,利用三元组(ip地址,协议,端口)就可以唯一标识网络中的进程,网络中的进程通信可以利用这个标志与其它进程进行交互。

  4. xtgxiso 说:

    Socket起源于Unix,Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开(open) –> 读写(write/read) –> 关闭(close)”模式来进行操作因此 Socket 也被处理为一种特殊的文件