如何用Go语言创建客户端服务器?

4 sockets go

我是新手,我正在尝试使用go语言准备客户端服务器并尝试编写代码,但是没有给出任何输出。它没有发出任何错误,只是在听。

请有人帮助我,我想使用go创建身份验证系统,其中服务器使用用户名密码对客户端进行身份验证。

服务器:

package main

import (
        "fmt"
        "net"
)

func main() {
        service := "0.0.0.0:8080"
        tcpAddr, err := net.ResolveTCPAddr("tcp", service)
        checkError(err)
        listener, err := net.ListenTCP("tcp", tcpAddr)
        checkError(err)
        for {
                conn, err := listener.Accept()
                //fmt.Println("Server listerning")
                _, err = conn.Read([]byte("HEAD"))
                if err != nil {
                        conn.Close()
                }
                if err != nil {
                        continue
                }
        }
}

func checkError(err error) {
        if err != nil {
                fmt.Println("Fatal error ", err.Error())
        }
}
Run Code Online (Sandbox Code Playgroud)

客户:

package main

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

func main() {
        if len(os.Args) != 2 {
                fmt.Println("Usage: ", os.Args[0], "host")
                os.Exit(1)
        }
        host := os.Args[1]
        conn, err := net.Dial("tcp", host+":8080")
        checkError(err)
        _, err = conn.Write([]byte("HEAD"))
        reader := bufio.NewReader(os.Stdin)
        for {
                line, err := reader.ReadString('\n')
                ftm.Println(err)
                line = strings.TrimRight(line, " \t\r\n")
                if err != nil {
                        conn.Close()
                        break

                }
        }
}
func checkError(err error) {
        if err != nil {
                fmt.Println("Fatal error ", err.Error())
        }
}
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 5

我不确定您是否需要解析您的地址才能收听。

您应该能够做到这一点:

listener, err := net.Listen("tcp", ":8080")
Run Code Online (Sandbox Code Playgroud)

而且您似乎对接收的字节服务器端不做任何事情(丢弃的结果Read),这解释了为什么您认为自己什么也没收到。

请注意,您的代码一次只能处理一个连接。您应该在新的goroutine中处理每个打开的连接。

这是相关问题中通过TCP进行客户端-服务器通信示例

  • @KarimkhanPathan我认为上面给出的示例就是您所需要的。由于您将需要发送除任意字符串之外的结构化数据(用户名/密码;身份验证结果等),因此您确实需要编码器和解码器。使用编码器/解码器,您不必处理bufio。只需使用Encode()和Decode()方法即可。如果您想与其他语言进行交互并且不想使用Gob,请简单地用Json,XML或其他内容替换Gob。 (3认同)