从一个端口向另一个端口发送消息

用户名

我有一个服务器和两个使用各自端口的客户端。当客户端向服务器发送消息时,服务器会将其回显给发送方。然后,服务器也应该将消息发送到另一个客户端。这就是我遇到的问题。

我相信我可能在writeMessage()中设置了错误的连接,但是我不确定。目前,我的功能只是尝试在端口8080上写入客户端2,以进行调试。

服务器:

package main

import (
    "fmt"
    "log"
    "net"
)

var message string = ""

func main() {
    fmt.Println("The server is listening on Port 3000 and 8080")
    listener, err := net.Listen("tcp", "localhost:3000")
    if err != nil {
        log.Fatal(err) 
    }

    listener2, err := net.Listen("tcp", "localhost:8080")
    if err != nil {
        log.Fatal(err)
    }

    go acceptLoop(listener)
    acceptLoop(listener2)


}

func acceptLoop(l net.Listener) {
    defer l.Close()
    for {
            c, err := l.Accept()
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println("New connection found!")
            listenConnection(c)
    }
}

func listenConnection(conn net.Conn) {
        for {
                buffer := make([]byte, 1400)
                dataSize, err := conn.Read(buffer)
                if err != nil {
                    fmt.Println("Connection has closed")
                    return
                }

                //This is the message you received
                data := buffer[:dataSize]
                fmt.Print(string(data))
                conn.Write(data)
                message = string(data)
                writeMessage()
        }
}

func writeMessage(){
    conn2, e := net.Dial("tcp", "localhost:8080")
    if e != nil {
        log.Fatalln(e)
    }
    defer conn2.Close()
    conn2.Write([]byte(message))
}

客户1:

package main

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

func main() {
        conn, err := net.Dial("tcp", "localhost:3000")
        if err != nil {
                log.Fatalln(err)
        }

        go listenConnection(conn, err)
        writeMessage(conn, err)

}

func listenConnection(conn net.Conn, err error){
    for {
                buffer := make([]byte, 1400)
                dataSize, err := conn.Read(buffer)
                if err != nil {
                        fmt.Println("connection closed")
                        return
                }

                data := buffer[:dataSize]
                fmt.Print("Server: ", string(data))
        }
}

func writeMessage(conn net.Conn, err error){
    for {
        reader := bufio.NewReader(os.Stdin)
        //fmt.Print("Enter message: ")
        text, _ := reader.ReadString('\n')
        text = "3000: " + text

        _, err = conn.Write([]byte(text))
        if err != nil {
                log.Fatalln(err)
        }
    }
}

(我的第二个客户端与我的第二个客户端相同,只是端口3000被8080代替。)

为了重现该问题,用户必须先运行服务器代码,然后再运行两个客户端。然后,客户端可以将消息发送到服务器。

任何帮助,将不胜感激。我根本无法弄清楚。希望一些经验丰富的Go用户能够为您提供帮助!

贾斯汀

您的逻辑似乎有缺陷,其中acceptloop要求进行listenconnection,它会在无限循环内创建无限循环。我认为您需要使用用例场景来重建系统

如果我的理解是正确的,则您希望有一个服务器在等待客户端连接。首先,client1进入,发送一些数据。服务器接受此连接,并且只需要为每个客户端接受一次。此时,如果client2在线,则将数据发送到client2。所有这些都是无限循环发生的。

签出此代码https://play.golang.org/p/_5AREG3jnG

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从一个模块向另一个模块发送消息?

来自分类Dev

从一个终端用户向另一个用户发送消息

来自分类Dev

htaccess从一个端口重定向到另一个

来自分类Dev

从一个C#控制台应用程序向另一个发送消息

来自分类Dev

如何从一个线程向另一个线程发送消息(用C语言编写)?

来自分类Dev

创建从一个本地端口到另一个本地端口的隧道的简单方法?

来自分类Dev

如何使NIC能够通过另一个端口传输从一个端口接收的数据?

来自分类Dev

将流量从一个端口转发到另一个端口,反之亦然

来自分类Dev

将 UDP 数据包从一个端口转发到另一个端口

来自分类Dev

从一个jsp向另一个jsp发送变量

来自分类Dev

从一个客户端向另一个socket.io发送响应消息时出现问题

来自分类Dev

在另一个端口安装phpmyadmin

来自分类Dev

在另一个端口中安装phpmyadmin

来自分类Dev

从另一个容器访问的Docker容器端口

来自分类Dev

Html 链接到另一个端口

来自分类Dev

使用iptables丢弃所有流量并将流量从一个端口转发到另一个端口

来自分类Dev

如何从一个JS函数向另一个JS函数发送JSON数组数据?

来自分类Dev

Docker:如何从一个正在运行的容器向另一个容器发送信号?

来自分类Dev

使用Parse从一个用户向另一个用户发送推送通知?

来自分类Dev

如何通过EXECL从一个进程向另一个进程发送连续数据流

来自分类Dev

如何从一个孩子向C中的另一个孩子发送信号?

来自分类Dev

如何使用Scenic将消息从一个场景发送到另一个场景?

来自分类Dev

一个端口正在监听*,另一个端口正在监听127.0.0.1,只有第一个端口正在接受远程连接

来自分类Dev

Python flask服务器,如何向另一个请求的线程发送消息?

来自分类Dev

从另一个脚本向Ratchet WebSocket服务器发送消息

来自分类Dev

Python flask服务器,如何向另一个请求的线程发送消息?

来自分类Dev

从一个Winform应用程序向另一个应用程序发送参数,并填充一个文本框

来自分类Dev

从一个servlet向另一个(jsp + servlet + mysql)发送一个值(例如,id)

来自分类Dev

将一个端口范围映射到另一个端口范围(范围的长度相等)

Related 相关文章

  1. 1

    如何从一个模块向另一个模块发送消息?

  2. 2

    从一个终端用户向另一个用户发送消息

  3. 3

    htaccess从一个端口重定向到另一个

  4. 4

    从一个C#控制台应用程序向另一个发送消息

  5. 5

    如何从一个线程向另一个线程发送消息(用C语言编写)?

  6. 6

    创建从一个本地端口到另一个本地端口的隧道的简单方法?

  7. 7

    如何使NIC能够通过另一个端口传输从一个端口接收的数据?

  8. 8

    将流量从一个端口转发到另一个端口,反之亦然

  9. 9

    将 UDP 数据包从一个端口转发到另一个端口

  10. 10

    从一个jsp向另一个jsp发送变量

  11. 11

    从一个客户端向另一个socket.io发送响应消息时出现问题

  12. 12

    在另一个端口安装phpmyadmin

  13. 13

    在另一个端口中安装phpmyadmin

  14. 14

    从另一个容器访问的Docker容器端口

  15. 15

    Html 链接到另一个端口

  16. 16

    使用iptables丢弃所有流量并将流量从一个端口转发到另一个端口

  17. 17

    如何从一个JS函数向另一个JS函数发送JSON数组数据?

  18. 18

    Docker:如何从一个正在运行的容器向另一个容器发送信号?

  19. 19

    使用Parse从一个用户向另一个用户发送推送通知?

  20. 20

    如何通过EXECL从一个进程向另一个进程发送连续数据流

  21. 21

    如何从一个孩子向C中的另一个孩子发送信号?

  22. 22

    如何使用Scenic将消息从一个场景发送到另一个场景?

  23. 23

    一个端口正在监听*,另一个端口正在监听127.0.0.1,只有第一个端口正在接受远程连接

  24. 24

    Python flask服务器,如何向另一个请求的线程发送消息?

  25. 25

    从另一个脚本向Ratchet WebSocket服务器发送消息

  26. 26

    Python flask服务器,如何向另一个请求的线程发送消息?

  27. 27

    从一个Winform应用程序向另一个应用程序发送参数,并填充一个文本框

  28. 28

    从一个servlet向另一个(jsp + servlet + mysql)发送一个值(例如,id)

  29. 29

    将一个端口范围映射到另一个端口范围(范围的长度相等)

热门标签

归档