) func main() { listener, err := net."> ) func main() { listener, err := net.">
117.info
人生若只如初见

Golang如何在Linux上进行网络编程

在Linux上进行Golang网络编程,你需要了解Go语言的基本网络库net。这个库提供了一系列用于实现TCP、UDP、UNIX域套接字等网络功能的接口。下面是一些基本的网络编程示例:

  1. TCP服务器:
package main

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

func main() {
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println("Error listening:", err)
		os.Exit(1)
	}
	defer listener.Close()

	fmt.Println("Listening on :8080")

	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("Error accepting connection:", err)
			continue
		}

		go handleConnection(conn)
	}
}

func handleConnection(conn net.Conn) {
	defer conn.Close()

	reader := bufio.NewReader(conn)
	for {
		message, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("Error reading:", err)
			return
		}

		fmt.Print("Received message: ", message)
		conn.Write([]byte("Message received\n"))
	}
}
  1. TCP客户端:
package main

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

func main() {
	conn, err := net.Dial("tcp", "localhost:8080")
	if err != nil {
		fmt.Println("Error connecting:", err)
		os.Exit(1)
	}
	defer conn.Close()

	go func() {
		reader := bufio.NewReader(conn)
		for {
			message, err := reader.ReadString('\n')
			if err != nil {
				fmt.Println("Error reading:", err)
				return
			}

			fmt.Print("Received message: ", message)
		}
	}()

	reader := bufio.NewReader(os.Stdin)
	for {
		fmt.Print("Enter message: ")
		message, _ := reader.ReadString('\n')

		_, err := conn.Write([]byte(message))
		if err != nil {
			fmt.Println("Error sending message:", err)
			return
		}
	}
}
  1. UDP服务器:
package main

import (
	"fmt"
	"net"
)

func main() {
	address, err := net.ResolveUDPAddr("udp", ":8080")
	if err != nil {
		fmt.Println("Error resolving UDP address:", err)
		return
	}

	conn, err := net.ListenUDP("udp", address)
	if err != nil {
		fmt.Println("Error listening on UDP:", err)
		return
	}
	defer conn.Close()

	fmt.Println("Listening on :8080")

	buffer := make([]byte, 1024)
	for {
		n, addr, err := conn.ReadFromUDP(buffer)
		if err != nil {
			fmt.Println("Error reading from UDP:", err)
			continue
		}

		fmt.Printf("Received message from %s: %s\n", addr.String(), string(buffer[:n]))
		conn.WriteToUDP([]byte("Message received\n"), addr)
	}
}
  1. UDP客户端:
package main

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

func main() {
	address, err := net.ResolveUDPAddr("udp", "localhost:8080")
	if err != nil {
		fmt.Println("Error resolving UDP address:", err)
		return
	}

	conn, err := net.DialUDP("udp", nil, address)
	if err != nil {
		fmt.Println("Error dialing UDP:", err)
		return
	}
	defer conn.Close()

	go func() {
		buffer := make([]byte, 1024)
		for {
			n, _, err := conn.ReadFromUDP(buffer)
			if err != nil {
				fmt.Println("Error reading from UDP:", err)
				return
			}

			fmt.Printf("Received message: %s\n", string(buffer[:n]))
		}
	}()

	reader := bufio.NewReader(os.Stdin)
	for {
		fmt.Print("Enter message: ")
		message, _ := reader.ReadString('\n')

		_, err := conn.Write([]byte(message))
		if err != nil {
			fmt.Println("Error sending message:", err)
			return
		}
	}
}

这些示例展示了如何在Linux上使用Golang进行基本的网络编程。你可以根据自己的需求修改和扩展这些示例。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe31bAzsKAgVVAlI.html

推荐文章

  • 如何在Linux系统中安装LibreOffice

    在Linux系统中安装LibreOffice有多种方法,以下是几种常见的方法:
    方法一:使用包管理器安装
    对于基于Debian的系统(如Ubuntu): 更新包列表:

  • Linux版LibreOffice如何进行安全设置

    在Linux系统上,LibreOffice的安全设置可以通过多种方式进行,以下是一些常见的安全设置方法:
    设置文档密码 新建或打开文档:首先,打开LibreOffice并新建...

  • LibreOffice在Linux上如何实现高效协作

    在Linux上,LibreOffice可以通过多种方式实现高效协作,以下是一些关键步骤和功能:
    安装和更新LibreOffice 安装最新版本:确保安装最新版本的LibreOffice,...

  • 如何优化Linux系统下的LibreOffice性能

    要优化Linux系统下的LibreOffice性能,可以采取以下几种方法: 增加内存和图形缓冲区: 打开LibreOffice Writer或Calc。
    进入「工具」—「选项」—「内存」...

  • Crontab任务的时间格式是什么

    Crontab任务的时间格式由五个字段组成,分别表示分钟、小时、日期、月份和星期。每个字段的取值范围如下: 分钟:0-59
    小时:0-23
    日期:1-31
    月...

  • 如何删除crontab中的任务

    要删除crontab中的任务,请按照以下步骤操作: 打开终端(Terminal)。 输入 crontab -l 命令,列出当前用户的所有crontab任务。这将显示一个包含所有定时任务的...

  • Crontab中的特殊字符有哪些

    在Crontab中,有以下特殊字符:
    1. 星号(*) 含义:表示任意值。
    示例: * * * * * 表示每分钟都执行。
    0 12 * * * 表示每天中午12点执行。 2. ...

  • 如何在crontab中添加新任务

    在Linux系统中,crontab是一个用于设置周期性被执行的任务的工具。要在crontab中添加新任务,请按照以下步骤操作: 打开终端。 输入crontab -e命令,然后按回车。...