golang tcp

/**
  golang tcp
*/
package main

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

var p = fmt.Println

func server() {
	tcpAddr, _ := net.ResolveTCPAddr("tcp", ":7070")
	l, e := net.ListenTCP("tcp", tcpAddr)
	defer func() {
		p("server closed")
		l.Close()
	}()
	if e != nil {
		return
	}
	for {
		conn, e := l.Accept()
		conn.SetDeadline(time.Now().Add(time.Second * 15))
		if e != nil {
			continue
		}
		go func(conn net.Conn) {
			defer func() {
				p("a clent closed or timeout")
				conn.Close()
			}()
			for {
				b := make([]byte, 25)
				_, e := conn.Read(b)
				if e != nil {
					p("server:", e)
					break
				}
				req := strings.TrimSpace(string(b))
				conn.Write([]byte("来之服务端的回复:您输入了>>" + req))
				if req == "exit" || req == "quit" {
					break
				}
			}
		}(conn)
	}
}

func main() {
	//server
	go server()
	//client
	tcpAddr, _ := net.ResolveTCPAddr("tcp4", "127.0.0.1:7070")
	conn, e := net.DialTCP("tcp4", nil, tcpAddr)
	defer func() {
		p("clent closed")
		conn.Close()
	}()
	if e != nil {
		return
	}
	go func() {
		for {
			b := make([]byte, 500)
			_, e := conn.Read(b)
			if e != nil {
				p("client:", e) //e: eof
				break
			}
			p(string(b))
		}
	}()
	p("-----客户端:请输入.....")
	for {
		var input string
		fmt.Scanln(&input)
		conn.Write([]byte(input))
		if input == "exit" || input == "quit" {
			break
		}
	}
	time.Sleep(4 * time.Second)
}




### 使用 Golang 实现 TCP 连接 #### 创建一个简单的 TCP 客户端和服务器 下面展示的是创建简单 TCP 服务端与客户端的方法。此示例展示了如何建立连接、发送消息以及接收来自另一方的消息。 #### 启动 TCP 服务器 服务器程序会监听特定地址上的传入连接,并为每个新连接启动一个新的 goroutine 来处理通信[^1]。 ```go package main import ( "bufio" "fmt" "net" ) func handleConnection(conn net.Conn) { defer conn.Close() for { message, err := bufio.NewReader(conn).ReadString('\n') if err != nil { fmt.Println("Error reading:", err.Error()) return } fmt.Print("Message Received: " + message) newmessage := "Received your message\n" conn.Write([]byte(newmessage)) // 发送一条回复给客户端 } } func main() { listener, _ := net.Listen("tcp", ":8080") // 开始监听指定端口 defer listener.Close() for { conn, _ := listener.Accept() // 接受新的连接 go handleConnection(conn) // 处理连接 } } ``` #### 编写 TCP 客户端代码 客户端尝试连接到上述定义的服务端并可以向其发送信息,同时也能够接收到来自服务端的信息回应。 ```go package main import ( "bufio" "fmt" "os" "net" ) func main() { connection, _ := net.Dial("tcp", "localhost:8080") defer connection.Close() inputReader := bufio.NewReader(os.Stdin) for { fmt.Print("Please enter a message to send: ") text, _ := inputReader.ReadString('\n') // 获取用户输入的内容 fmt.Fprintf(connection, text+"\n") message, _ := bufio.NewReader(connection).ReadString('\n') // 读取返回的数据 fmt.Print("Message from server: " + message) } } ``` 以上两个脚本分别代表了一个基本的TCP聊天应用程序中的服务端和客户端部分。当运行这些程序时,可以在不同终端窗口中观察它们之间的交互情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值