为了账号安全,请及时绑定邮箱和手机立即绑定

go语言实现 tcp客户端/服务端

标签:
Go


/ server.go /

package main

import (

"bufio"

"fmt"

"net"

"time"

)

func main() {

var tcpAddr *net.TCPAddr

    tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

    tcpListener, _ := net.ListenTCP("tcp", tcpAddr)

    defer tcpListener.Close()

    for {

            tcpConn, err := tcpListener.AcceptTCP()

            if err != nil {

                    continue

            }

            fmt.Println("A client connected : " + tcpConn.RemoteAddr().String())

            go tcpPipe(tcpConn)

    }

}

func tcpPipe(conn *net.TCPConn) {

ipStr := conn.RemoteAddr().String()

defer func() {

fmt.Println("disconnected :" + ipStr)

conn.Close()

}()

reader := bufio.NewReader(conn)

    for {

            message, err := reader.ReadString('\n')

            if err != nil {

                    return

            }

            fmt.Println(string(message))

            msg := time.Now().String() + "\n"

            b := []byte(msg)

            conn.Write(b)

    }

}

/client.go /

package main

import (

"bufio"

"fmt"

"net"

"time"

)

var quitSemaphore chan bool

func main() {

var tcpAddr *net.TCPAddr

tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

    conn, _ := net.DialTCP("tcp", nil, tcpAddr)

    defer conn.Close()

    fmt.Println("connected!")

    go onMessageRecived(conn)

    b := []byte("time\n")

    conn.Write(b)

    <-quitSemaphore

}

func onMessageRecived(conn *net.TCPConn) {

reader := bufio.NewReader(conn)

for {

msg, err := reader.ReadString('\n')

fmt.Println(msg)

if err != nil {

quitSemaphore <- true

break

}

time.Sleep(time.Second)

b := []byte(msg)

conn.Write(b)

}

}

©著作权归作者所有:来自51CTO博客作者ebayboy的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消