新人求助!golang 怎么实现服务器被外网访问

desikee · 2017-12-06 11:34:29 · 2515 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-06 11:34:29 的主题,其中的信息可能已经有所发展或是发生改变。

我按照gopl上写了一个聊天服务器程序,想运行在阿里云服务器上,阿里云服务器能跑nginx,设置应该没问题

代码如下

package main 

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



type client chan<- string

var(
    entering = make(chan client)
    leave = make(chan client)
    messages = make(chan string)    
)

func main(){
    listenner, err := net.Listen("tcp", "120.78.169.107:8000")
    if err != nil{
        log.Fatal(err)
    }
    go broadcaster()
    for {
        conn, err := listenner.Accept()
        if err != nil{
            log.Print(err)
            continue
        }
        go handleConn(conn)
    }
}

func broadcaster(){
    clients := make(map[client] bool)
    for{
        select{
        case msg := <-messages:
            for cli := range clients{
                go func (cli client, msg string){
                    cli <- msg
                }(cli, msg)
            }
        case cli := <-entering:
            clients[cli] = true
        case cli := <-leave:
            delete(clients, cli)
            close(cli)
        }
    }
}

func handleConn(c net.Conn){
    ch := make(chan string)
    go clientWrite(c, ch)

    who := c.RemoteAddr().String()
    ch <- "Please input your name:"
    name := bufio.NewScanner(c)
    name.Scan()
    who = name.Text()
    ch <- "You are " + who
    entering <- ch
    messages <- who + " has arrived"
    input := bufio.NewScanner(c)
    for input.Scan(){
        messages <- who + ": " + input.Text()
    }

    messages <- who + " has left"
    leave <- ch
    c.Close()
}

func clientWrite(c net.Conn, ch  <-chan string){
    for msg := range ch{
        fmt.Fprintf(c, "\t%s\n", msg)
    }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2515 次点击  
加入收藏 微博
4 回复  |  直到 2017-12-08 02:15:27
desikee
desikee · #1 · 7年之前

已经解决了

stu2162583
stu2162583 · #2 · 7年之前

建议你解决的时候贴出问题的解决方案,到时候有相同问题的人就可以得到帮助了是吧。这个是因为设置安全组还要设置吧。

desikee
desikee · #3 · 7年之前
stu2162583stu2162583 #2 回复

建议你解决的时候贴出问题的解决方案,到时候有相同问题的人就可以得到帮助了是吧。这个是因为设置安全组还要设置吧。

安全组是要设置,主要是设置哪些端口开启自定义TCP,我已经开启了8000/8888端口。

代码部分net.Listen函数实参错了,应改为net.Listen("tcp", ":8000"),即监听所有IP

imshunza
imshunza · #4 · 7年之前

1、首先阿里云,。你要确定安全组问题,学会排查问题 2、可以不监听所有IP,具体看你服务器,如果是VPC环境下的,只监听内网IP就可以了,如果是服务器在非VPC环境下,在机器上你是可以看到公有网络IP的,可以监听公网IP

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传