zoukankan      html  css  js  c++  java
  • socket与tcp连接

    tcp服务器:
    Go会为每一个客户端产生一个协程用来处理请求
    Server端代码:
    func main(){
    fmt.Println("Starting the server ...")
    listener,_ := net.Listen("tcp","localhost:50000")//使用tcp协议监听50000端口
    for {
    conn,_ := listener.Accept()//Server对应于对应于Client的一个conn,一个Clilent只会有一个Conn
    go doServerStuff(conn)
    }
    }
    func doServerStuff(conn net.Conn){
    for{
    buf := make([]byte, 512)
    len,_ := conn.Read(buf)
    if len >0{
    fmt.Println(string(buf[:len]),len)
    }
    }
    }

    Client端代码:
    func main(){
    conn,_ :=net.Dial("tcp","localhost:50000")//使用tco协议连接目标ip的端口,返回一个Conn连接
    reader := bufio.NewReader(os.Stdin)
    fmt.Println("First,What is you name?")
    clientName,_ := reader.ReadString(' ')
    trimmedClient := strings.Trim(clientName," ")//除去 ,Linux下是
    conn.Write([]byte(trimmedClient))//向连接中写入数据一段数据发送服务器
    conn.Close()
    }
    每一次调用Write方法都会将写入连接的数据立刻发送到服务器,可以把连接看作服务器。
    而在服务器中的Conn也是,每次读的数据都是客户端发来的数据堆积在一起。通常通过bufio,readString(' ')读取。

    socket:TCP连接在C/S两端各自的那个Conn(连接)就是socket。
    socket是网络传输中在C/S两端各拥有一个的表示TCP连接的对象。
    或者说是一个接口,用于操作C/S两端数据发送和读取的一个接口。

    所以说socket就是那个conn对象。
    对于C/S架构的两端来说,两端的conn相同,具有同样的功能,一模一样两端可以使用相同的方法。
    比如说在Client端也可以这样:
    conn,_ := new.Dial("tcp","localhost:8080")
    reader :=bufio.NewReader(conn)
    reader.ReadString(' ')
    所以两端没有主次之分,大家都是电脑、都是应用程序。
    不过有客户端和服务端之分。

  • 相关阅读:
    阿里云服务器常见问题记录
    npm 常见错误记录
    C程序设计(第四版)课后习题完整版 谭浩强编著
    博客如何快速让百度谷歌等各大引擎收录
    python itertools 用法
    python中dict的fromkeys用法
    python解析XML
    flask+uwsgi+nginx+docker-compose部署
    python的构建工具setup.py
    python判断字符串类型
  • 原文地址:https://www.cnblogs.com/mcmx/p/11390903.html
Copyright © 2011-2022 走看看