golang tcp

一、服务端

package main

import (
	"fmt"
	"net"
	"time"
)

func main() {
	TCPListener, err := net.Listen("tcp", ":8004")

	//tcpAddr, err := net.ResolveTCPAddr("tcp", ":8004")
	//if err!=nil{
	//	fmt.Println("ResolveTCPAddr err:",err)
	//}
	//
	//TCPListener, err := net.ListenTCP("tcp", tcpAddr)
	if err != nil {
		fmt.Println("tcp dial err:", err)
	}
	defer TCPListener.Close()

	fmt.Println("tcpConn ready!")

	for {
		tcpConn, err := TCPListener.Accept()
		if err != nil {
			fmt.Println("TCPAccept err:", err)
		}
		fmt.Println(tcpConn)
		go tcpPipe(tcpConn)
	}
}

func tcpPipe(tcpConn net.Conn) {
	ipAddr := tcpConn.RemoteAddr().String()
	//defer func() {
	//	fmt.Println("Disconnected!", ipAddr)
	//	tcpConn.Close()
	//}()
	//
	//reader := bufio.NewReader(tcpConn)
	i := 0
	//for {
	//	msg, err := reader.ReadString('\n')
	//	if err != nil || err == io.EOF {
	//		fmt.Println(err)
	//	}
	//
	//	fmt.Println("server读取消息:", msg)
	//	//time.Sleep(time.Nanosecond * 3)
	//	msgs := time.Now().String() + ipAddr + "say hello"
	//
	//	tcpConn.Write([]byte(msgs))
	//	//i++
	//	//if i > 10 {
	//	//	break
	//	//}
	//
	//}

	//读
	buf := make([]byte, 4096)
	for{
		n, err := tcpConn.Read(buf)
		if err != nil {
			fmt.Println("ReadFromUDP err:", err)
			return
		}

		fmt.Printf("读取%v的数据为%s\n", ipAddr, buf[:n])

		//写
		daytime := time.Now().String()
		_, err = tcpConn.Write([]byte(daytime))
		if err != nil {
			fmt.Println("WriteToUDP err:", err)
			return
		}
	}

}

二、客户端

package main

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

func main() {
	tcpConn, err := net.Dial("tcp", ":8004")
	if err != nil {
		fmt.Println("tcp dial err:", err)
	}
	defer tcpConn.Close()
	fmt.Println("tcpCli ready")
	onMessageReceived(tcpConn)

}

func onMessageReceived(conn net.Conn) {
	reader := bufio.NewReader(os.Stdin)
	buf := make([]byte, 4096)
	for {
		line, _, _ := reader.ReadLine()
		_, err := conn.Write(line)
		if err != nil {
			fmt.Println(err)
		}
		n, err := conn.Read(buf)
		fmt.Println(string(buf[:n]))
	}
	//reader := bufio.NewReader(conn)
	//b := []byte(conn.LocalAddr().String() + " Say hello to Server... \n")
	//conn.Write(b)
	//for {
	//	msg, err := reader.ReadString('\n')
	//	fmt.Println("ReadString")
	//	fmt.Println(msg)
	//
	//	if err != nil || err == io.EOF {
	//		fmt.Println(err)
	//		break
	//	}
	//	time.Sleep(time.Nanosecond * 2)
	//
	//	fmt.Println("writing...")
	//
	//	b := []byte(conn.LocalAddr().String() + " write data to Server... \n")
	//	_, err = conn.Write(b)
	//
	//	if err != nil {
	//		fmt.Println(err)
	//		break
	//	}
	//}

	//buf:=make([]byte,4096)
	//for{
	//	n, err := tcpConn.Read(buf)
	//	if err!=nil||err==io.EOF{
	//		fmt.Println("tcp read err:",err)
	//		break
	//	}
	//	fmt.Println("cli读取数据为:",string(buf[:n]))
	//}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值