首页 > 其他 > 详细

tcp编程、socket编程

时间:2018-02-04 23:51:28      阅读:330      评论:0      收藏:0      [点我收藏+]

tcp编程(需要建立连接,三次握手,四次挥手,然后发送信息流,数据包是有序的)

udp编程(知道IP、端口直接发送数据,数据包可能是无序的)

1、客户端和服务器

技术分享图片

socket编程

1.服务端的处理流程
  a.监听端口
  b.接收客户端的链接
  c.创建goroutine,处理该链接

2.客户端的处理流程
  a.建立与服务端的链接
  b.进行数据收发
  c.关闭链接

3.服务端代码

技术分享图片
package main

import (
    "fmt"
    "net"//导入socket的包
)

func main() {
    fmt.Println("start server...")
    listen, err := net.Listen("tcp", "0.0.0.0:50000")//监听50000端口
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }

    for {
        conn, err := listen.Accept()//等待客户端连接
        if err != nil {
            fmt.Println("accept failed, err:", err)
            continue
        }
        go process(conn)
    }

}

func process(conn net.Conn) {
    defer conn.Close()
    for {
        buf := make([]byte, 512)
        _, err := conn.Read(buf)//读取客户端传输过来的数据
        if err != nil {
            fmt.Println("read err:", err)
            return
        }
        fmt.Println("read: ", string(buf))
    }
}
View Code

4.客户端代码

技术分享图片
package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
    "strings"
)

func main() {
    conn, err := net.Dial("tcp", "localhost:50000")   //建立链接
    if err != nil {
        fmt.Println("Error dialing", err.Error())
        return
    }

    defer conn.Close()
    inputReader := bufio.NewReader(os.Stdin)  //从终端读取数据
    for {
        input, _ := inputReader.ReadString(\n) //从终端读取一行数据
        trimmedInput := strings.Trim(input, "\r\n")//去掉字符串\r\n
        if trimmedInput == "Q" {
            return
        }

        _, err = conn.Write([]byte(trimmedInput))//将信息发给服务端
        if err != nil {
            return
        }
    }
}
View Code

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tcp编程、socket编程

原文:https://www.cnblogs.com/domestique/p/8414731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!