【Golang】✔️走进 Go 语言✔️ 第二十四课 TCP 高阶操作

网友投稿 856 2025-04-01

golang】✔️走进 Go 语言✔️ 第二十四课 TCP 高阶操作

概述

基础知识

Conn 接口

net.Listen()

listener.Accept()

conn.Read()

conn.Write()

交互式通信

服务器

客户端

输出结果:

概述

Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 24 课)

基础知识

Conn 接口

Conn 是一种通用的面向流的网络连接. 多个 Goroutine 可以同时调用 Conn 上的方法.

net.Listen()

监听本地网络的广播.

格式:

net.Listen(network, address string)

1

参数:

network: 网络模式, “tcp”, “tcp4”, “tcp6”, “unix”, “unixpacket” 六选一

address: 网络地址

例子:

listen_socket, err := net.Listen("tcp", "127.0.0.1:8888")

1

返回值:

listen_socket: 监听接口

err: 错误

listener.Accept()

连接客户端.

格式:

listener.Accept()

1

例子:

conn, err := listen_socket.Accept()

1

返回值:

conn: 网络接口

err: 错误

conn.Read()

读取信息.

格式:

conn.Read(b []byte)

1

例子:

nums, err := conn.Read(buffer)

1

返回值:

nums: 读取的字节数

err: 错误

conn.Write()

传输信息.

格式:

conn.Write(b []byte)

1

例子:

conn.Write([]byte("Hi, Server"))

1

交互式通信

服务器

package main import ( "fmt" "net" ) // 发送消息 func send_info(conn net.Conn) { // 发送消息 _, err := conn.Write([]byte("Message received")) error_check(err) fmt.Println("发送消息: Message received") } // 接收消息 func receive_info(conn net.Conn) { // 缓冲 buffer := make([]byte, 1024) // 循环读取 for { // 读取数据 nums, err := conn.Read(buffer) if err != nil { break } if nums != 0 { // 获取地址 address := conn.RemoteAddr() fmt.Println("收到消息:", string(buffer[:nums]), "来自:", address) } // 发送消息 send_info(conn) } } // 错误处理 func error_check(err error) { if err != nil { fmt.Println("Error:", err) } } func main() { fmt.Println("服务端正在启动...") // 创建TCP服务端 listen_socket, err := net.Listen("tcp", "127.0.0.1:8888") error_check(err) // 关闭 defer listen_socket.Close() fmt.Println("服务端启动完毕, 等待连接...") // 启动连接 for { // 连接新客户端 conn, err := listen_socket.Accept() error_check(err) // 接收每一个客户端 go receive_info(conn) } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

【Golang】✔️走进 Go 语言✔️ 第二十四课 TCP 高阶操作

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

客户端

package main import ( "bufio" "fmt" "net" "os" ) // 发送消息 func send_msg(conn net.Conn) { // 循环发送 for { // 读取键盘输入 reader := bufio.NewReader(os.Stdin) // 读取一行 data, _, _ := reader.ReadLine() // 收到exit, 关闭客户端 if string(data) == "exit" { fmt.Println("客户端关闭") break } // 发送输入的字符串 _, err := conn.Write(data) if err != nil { conn.Close() fmt.Println("Error:", err, "客户端关闭") break } } } func main() { fmt.Println("客服端正在建立连接...") // 建立网络连接 conn, err := net.Dial("tcp", "127.0.0.1:8888") if err != nil { fmt.Println("网络连接错误") os.Exit(1) } fmt.Println("客户端成功连接到服务器, 服务器地址:", conn.RemoteAddr()) // 发送消息 go send_msg(conn) // 接收消息 buffer := make([]byte, 1024) // 循环接收 for { // 读取消息 nums, err := conn.Read(buffer) if err != nil { fmt.Println("Error:", err) } fmt.Println("收到消息:", string(buffer[:nums])) } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

输出结果:

服务端:

服务端正在启动... 服务端启动完毕, 等待连接... 收到消息: 洞1洞1, 我是洞2 来自: 127.0.0.1:62831 发送消息: Message received 收到消息: 洞1洞1, 我是洞3 来自: 127.0.0.1:55002 发送消息: Message received

1

2

3

4

5

6

客户端:

客服端正在建立连接... 客户端成功连接到服务器, 服务器地址: 127.0.0.1:8888 洞1洞1, 我是洞3 收到消息: Message received

1

2

3

4

Go TCP/IP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:15分钟!一键部署Oracle 12CR2单机CDB+PDB
下一篇:已是最新文章
相关文章