13.网络编程

实现TCP通信

懵逼树上懵逼果,懵逼树下你和我

TCP客户端

package main

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

func main() {
	// 与服务端建立连接
	conn, err := net.Dial("tcp", "127.0.0.1:20000")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	// 使用连接进行数据的发送和接收
	input := bufio.NewReader(os.Stdin)
	for {
		s, _ := input.ReadString('\n')
		s = strings.TrimSpace(s)
		if strings.ToUpper(s) == "Q" {
			return
		}
		// 给服务端发消息
		_, err := conn.Write([]byte(s))
		if err != nil {
			fmt.Printf("err: %v\n", err)
			return
		}
		// 从服务端接收回复的消息
		var buf [1024]byte
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Printf("reead失败err: %v\n", err)
			return
		}
		fmt.Println("收到服务端回复:", string(buf[:n]))

	}
}

TCP服务端

package main

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

func process(conn net.Conn) {
	defer conn.Close() // 处理完成以后要关闭这个连接
	for {
		reader := bufio.NewReader(conn)
		var buf [128]byte
		n, err := reader.Read(buf[:])
		if err != nil {
			fmt.Printf("err: %v\n", err)
			break
		}
		recv := string(buf[:n])
		fmt.Printf("接收到的数据recv: %v\n", recv)
		conn.Write([]byte("ok")) // 把收到的数据返回
	}

}

func main() {
	// 开启监听服务
	listen, err := net.Listen("tcp", "127.0.0.1:20000")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	for {
		// 等待客户端连接
		conn, err := listen.Accept()
		if err != nil {
			fmt.Printf("err: %v\n", err)
			continue
		}
		// 启动一个单独的goroutine去处理连接
		go process(conn)

	}
}

UDP通讯

UDP服务端

package main

import (
	"fmt"
	"net"
)

func main() {
	listen, err := net.ListenUDP("udp", &net.UDPAddr{
		IP:   net.IPv4(127, 0, 0, 1),
		Port: 30000,
	})
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	defer listen.Close()
	for {
		var buf [1024]byte
		n, addr, err := listen.ReadFromUDP(buf[:])
		if err != nil {
			fmt.Printf("err: %v\n", err)
			return
		}
		fmt.Println("接收到的数据:", string(buf[:n]))
		_, er := listen.WriteToUDP(buf[:n], addr)
		if er != nil {
			fmt.Printf("err: %v\n", er)
			return
		}
	}
}

UDP客户端

package main

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

func main() {
	c, err := net.DialUDP("udp", nil, &net.UDPAddr{
		IP:   net.IPv4(127, 0, 0, 1),
		Port: 30000,
	})
	if err != nil {
		fmt.Printf("err: %v\n", err)
	}
	defer c.Close()

	input := bufio.NewReader(os.Stdin)
	for {
		s, _ := input.ReadString('\n')
		_, err = c.Write([]byte(s))
		if err != nil {
			fmt.Printf("err: %v\n", err)
			return
		}
		// 接收数据
		var buf [1024]byte
		n, addr, err := c.ReadFromUDP(buf[:])
		if err != nil {
			fmt.Printf("err: %v\n", err)
			return
		}
		fmt.Printf("从%v,读取:%v\n", addr, buf[:n])
	}
}

posted @ 2025-06-27 13:43  L大官  阅读(16)  评论(0)    收藏  举报