我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android应用程序无法连接到socket.io Golang服务器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android应用程序无法连接到socket.io Golang服务器

最近,一些Android应用程序无法连接到socket.io Golang服务器的问题引起了广泛关注。php小编新一在此为大家解答。在使用socket.io Golang服务器时,有一些常见的连接问题可能导致Android应用程序无法连接。首先,确保你的Android应用程序和服务器在相同的网络环境下,并且能够互相访问。另外,检查你的代码中是否正确设置了服务器的地址和端口。如果问题仍然存在,可以尝试使用其他网络调试工具来检查连接问题,如Wireshark等。希望这些解答能帮助到你解决问题!

问题内容

我不知道我是否遗漏了一些东西,因为我的 kotlin 代码没有找到 golang 套接字服务器。我做了一个 netstat -ano 并且端口 8000 已经用于 tcp,所以我认为套接字服务器运行良好。但我的安卓还是找不到。服务器和模拟器都在同一网络上。这是我的代码:

//服务器(golang)

import (
    "fmt"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
    "github.com/googollee/go-socket.io/engineio"
    "github.com/googollee/go-socket.io/engineio/transport"
    "github.com/googollee/go-socket.io/engineio/transport/polling"
    "github.com/googollee/go-socket.io/engineio/transport/websocket"
)

server := socketio.newserver(&engineio.options{
    transports: []transport.transport{
        &polling.transport{
            checkorigin: alloworiginfunc,
        },
        &websocket.transport{
            checkorigin: alloworiginfunc,
        },
    },
})

server.onconnect("/", func(s socketio.conn) error {
    s.setcontext("")
    fmt.println("connected:", s.id())
    return nil
})

server.onevent("/", "notice", func(s socketio.conn, msg string) {
    fmt.println("notice:", msg)
    s.emit("reply", "have "+msg)
})

server.onerror("/", func(s socketio.conn, e error) {
    fmt.println("meet error:", e)
})

server.ondisconnect("/", func(s socketio.conn, reason string) {
    fmt.println("closed", reason)
})

go server.serve()
defer server.close()

http.handle("/socket.io/", server)
http.handle("/", http.fileserver(http.dir("./asset")))

fmt.println("scktsrv serving at localhost:8000...")
fmt.print(http.listenandserve(":8000", nil))

//android(kotlin)



implementation ('io.socket:socket.io-client:2.0.0') {
    exclude group: 'org.json', module: 'json'
}

try {
    msocket = io.socket("http://localhost:8000/skt")
    log.d(tag, "success: ${msocket.id()}")
} catch (e: exception) {
    e.localizedmessage?.let { log.e(tag, it) }
}

msocket.connect()
msocket.on(socket.event_connect, onconnect)
msocket.on("reply", onreply)

private var onconnect = emitter.listener {
    log.i(tag, "onconnect")
    msocket.emit("notice", "{\"relay_num\": 4, \"to_status\": 1}")
}

private var onreply = emitter.listener {
    log.i(tag, "replymsg: ${it[0]}")
}

更新:

在@dev.bmax的回答之前,我已经发现了一些关于启用cleartexttraffic的信息,并且已经在我的androidmanifest.xml上添加了 android:usescleartexttraffic="true" ,但该应用程序仍然无法连接到服务器。 socket.connected() 现在返回 false。

另外,您应该如何实际连接到服务器?我只需要 http://10.0.2.2:8000 而不需要任何路径吗?

更新:

我刚刚注意到我不断收到如下所示的日志:

tagsocket(6) with statstag=0xffffffff, statsuid=-1

它不断在 logcat 上弹出

更新:

我四处寻找其他代码,并找到了一个可以工作的代码。幸运或不幸的是,这很简单。这是我找到的代码:

//go语言

listener, _ := net.listen("tcp", ":8000")
for {
    conn, _ := listener.accept()
    fmt.printf("%s --- %s\n", conn.localaddr(), conn.remoteaddr())
    io.writestring(conn, "welcome to socket")
}

//android kotlin

val host = "192.168.100.250"
val port = 8000

executors.newsinglethreadexecutor().execute {
    try {
        val socket = java.net.socket(host, port)
        receivemove(socket)
    } catch (e: connectexception) {
        log.e(tag, "socket connexc: ${e.localizedmessage}")
        runonuithread {
            toast.maketext(this, "connection failed", toast.length_short).show()
        }
    }catch (e: exception) {
        log.e(tag, "socket connexc: ${e.localizedmessage}")
    }
}

现在我想知道,为什么准系统代码可以工作,而 googollee 库提供的代码却不能?我认为我没有错过双方的任何设置。

更新:

取得了一些进展。发现 android 代码可以工作,但由于某种原因正在执行一些意外的问题。以下是我在 android 端所做的更改的详细信息:

// 应用程序 build.gradle

implementation('io.socket:socket.io-client:0.8.3') {
    exclude group: 'org.json', module: 'json'
}

//mainactivity.kt

import io.socket.client.io
import io.socket.client.socket

init {
    try {
        msocket = io.socket("http://:8000/socket.io/")
    }catch (e: connectexception) {
        log.e(tag, "socket connexc: ${e.localizedmessage}")
    }catch (e: urisyntaxexception) {
        log.e(tag, "socket urisynexc: ${e.localizedmessage}")
    }catch (e: exception){
        log.e(tag, "socket exc: ${e.localizedmessage}")
    }
}

// androidmanifest.xml

android:usesCleartextTraffic="true"
//I used to have android:networkSecurityConfig="@xml/network_security_config" here as well

完成这些更改后,应用程序现在可以连接到服务器。但连接后,应用程序似乎立即断开连接。然后它再次连接到服务器,然后再次断开连接,然后连接到服务器,这个循环似乎没有停止。我在断开连接时收到 lated 客户端命名空间dis​​connect

解决方法

我终于找到了使这项工作发挥作用的部分。我认为最大的问题是在android方面。更换要使用的库似乎已经解决了所有问题,然后只需进行一个小的更改即可解决立即断开连接的问题。以下是双方的最终代码和其他详细信息:

//go语言

package main

import (
    "fmt"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
    "github.com/googollee/go-socket.io/engineio"
    "github.com/googollee/go-socket.io/engineio/transport"
    "github.com/googollee/go-socket.io/engineio/transport/polling"
    "github.com/googollee/go-socket.io/engineio/transport/websocket"
)

var alloworiginfunc = func(r *http.request) bool {
    return true
}

func main() {
    server := socketio.newserver(&engineio.options{
        transports: []transport.transport{
            &polling.transport{
                checkorigin: alloworiginfunc,
            },
            &websocket.transport{
                checkorigin: alloworiginfunc,
            },
        },
    })

    server.onconnect("/", func(s socketio.conn) error {
        s.setcontext("")
        fmt.println("connected:", s.id())
        return nil
    })

    server.onevent("/", "notice", func(s socketio.conn, msg string) {
        fmt.println("notice:", msg)
        s.emit("reply", "have "+msg)
    })

    server.onerror("/", func(s socketio.conn, e error) {
        fmt.println("error:", e)
    })

    server.ondisconnect("/", func(s socketio.conn, reason string) {
        fmt.println("closed", reason)
    })

    go server.serve()
    defer server.close()

    http.handle("/socket.io/", server)
    http.handle("/", http.fileserver(http.dir("./asset")))

    fmt.println("socket server serving at localhost:8000...")
    fmt.print(http.listenandserve(":8000", nil))
}

// 安卓 kotlin

androidmanifest.xml



应用程序构建.gradle

implementation('io.socket:socket.io-client:0.8.3') {
        exclude group: 'org.json', module: 'json'
    }

// mainactivity.kt 或任何您想放置此内容的地方

import io.socket.client.IO
import io.socket.client.Socket

class MainActivity : AppCompatActivity() {
    private lateinit var mSocket: Socket
    ...
    
    init {
        try {
            mSocket = IO.socket("http://:8000/")
        }catch (e: ConnectException) {
            Log.e(TAG, "Socket ConnExc: ${e.localizedMessage}")
        }catch (e: URISyntaxException) {
            Log.e(TAG, "Socket URISynExc: ${e.localizedMessage}")
        }catch (e: Exception){
            Log.e(TAG, "Socket Exc: ${e.localizedMessage}")
        }
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        mSocket.connect()
        
        binding.btnSend.setOnClickListener {
            Log.i(TAG, "isConnected: ${mSocket.connected()}")
            mSocket.emit("notice", "from_app_msg")
        }
    }
    
    override fun onDestroy() {
        super.onDestroy()

        mSocket.off()
        mSocket.disconnect()
    }
}

关于立即断开,看起来你在android端尝试连接时并不需要添加/socket.io。删除它解决了断开连接的问题。而且您的项目中不需要 asset 文件夹。伙计,这个 socket.io 东西很奇怪。

以上就是Android应用程序无法连接到socket.io Golang服务器的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android应用程序无法连接到socket.io Golang服务器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android应用程序无法连接到socket.io Golang服务器

最近,一些Android应用程序无法连接到socket.io Golang服务器的问题引起了广泛关注。php小编新一在此为大家解答。在使用socket.io Golang服务器时,有一些常见的连接问题可能导致Android应用程序无法连接。
Android应用程序无法连接到socket.io Golang服务器
2024-02-08

win10远程连接云服务器无法连接到服务器

一、远程连接失败当使用远程连接云服务器时,如果服务器无法连接,那么就会出现无法连接的情况。这时候我们需要查看是否输入正确的用户名和密码,如果用户名和密码错误,那么就无法连接。如果是密码错误,可以尝试使用管理员账号登录尝试。二、网络问题如果远程连接出现问题,那么我们就需要检查网络是否出现了问题。我们可以尝试更换网络环境或
win10远程连接云服务器无法连接到服务器
2023-10-28

云服务器怎么连接应用程序

云服务器连接应用程序的主要方式有以下几种:1. 远程桌面连接:使用远程桌面协议(如RDP,VNC等)连接到云服务器,在服务器上操作应用程序。这种方式适用于图形化界面的应用程序。2. SSH连接:使用SSH协议连接到云服务器,通过命令行界面操
2023-09-26

云服务器怎么连接应用程序

云服务器连接应用程序的步骤前提条件:已创建云服务器实例已部署应用程序步驟:开放端口设置防火墙规则映射公网IP配置域名解析(可选)部署应用程序测试连接注意事項:確保防火牆配置正確,防止未經授權訪問。定期更新应用程序和操作系統。考慮使用負載均衡器。監控效能,確保穩定運行。故障排除:無法訪問:檢查端口和防火牆規則,公網IP是否正确映射。效能緩慢:優化程式碼,升級硬體或增加實例數量。安全問題:加強防火牆配置,安裝防毒軟體,更新系統和應用程式。
云服务器怎么连接应用程序
2024-04-11

无法使用 Go 连接到 FTP 服务器,但可以使用 FileZilla 连接

php小编子墨发现有用户反馈在使用Go语言连接到FTP服务器时遇到了问题,但是使用FileZilla却可以正常连接。这个问题可能导致一些开发者无法顺利进行FTP操作。在本文中,我们将探讨可能的原因以及解决办法,帮助读者解决这个连接问题,以便
无法使用 Go 连接到 FTP 服务器,但可以使用 FileZilla 连接
2024-02-09

阿里云服务器无法连接到远程计算机

如果您的阿里云服务器无法连接到远程计算机,可能是由于以下原因之一造成的:网络连接问题:服务器与远程计算机之间的网络连接问题可能导致连接不稳定或连接中断。请尝试重新设置网络连接。防火墙或代理服务器阻止了连接:请确保您的防火墙或代理服务器已经启用或关闭,以便无法阻止访问请求。服务器配置问题:如果您的服务器配置不正确,可能无法与远程计算机建立连接。请确保您的服务器已经备份了所有配置数据,并且已
2023-10-26

利用Golang将应用程序部署到服务器的方法指南

如何利用Golang将应用程序部署到服务器上概述:在现代的软件开发中,将应用程序部署到服务器上已成为常态。将Go语言编写的应用程序部署到服务器上同样也是很常见的做法。本篇文章将介绍如何利用Golang将应用程序部署到服务器上,并提供具体的
利用Golang将应用程序部署到服务器的方法指南
2024-01-16

阿里云服务器无法连接到远程计算机怎么解决

首先,检查您的网络连接是否正常。在使用阿里云服务器之前,务必确保您的网络连接正常。可以尝试重新配置网络连接,确保您的网络配置足够快以便能顺利连接服务器。如果网络连接有问题,您可以尝试更改网络配置,例如更改WiFi名称或者尝试重新配置您的路由器等。其次,检查您的计算机的设置是否正确。在使用阿里云服务器之前,务必检查您的计
阿里云服务器无法连接到远程计算机怎么解决
2023-10-28

redis-copy使用6379端口无法连接到Redis服务器的问题

问题描述当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件。以编程方式来读取数据并写入到新的Redis服务端,使用开源工具 R
2023-05-16

Flutter应用程序可以发送到docker容器中的UDP服务器,但无法接收从服务器发送的数据

Flutter应用程序可以发送到docker容器中的UDP服务器,但无法接收从服务器发送的数据。这意味着在Flutter应用程序中,您可以使用UDP协议将数据发送到docker容器中运行的服务器。但是,当服务器尝试向应用程序发送数据时,Fl
Flutter应用程序可以发送到docker容器中的UDP服务器,但无法接收从服务器发送的数据
2024-02-09

解决苹果13手机无法远程连接轻量应用服务器的问题

1.检查网络连接首先,确保您的苹果13手机已连接到可用的网络。您可以尝试连接其他网站或应用程序,以确认网络连接是否正常。如果网络连接存在问题,请尝试以下步骤:确保您的手机处于Wi-Fi网络范围内,并且已正确输入Wi-Fi密码。如果您使用的是移动数据,请确保您的手机信号良好,并且您的数据计划允许远程连接。尝试重启您的手机
解决苹果13手机无法远程连接轻量应用服务器的问题
2023-10-28

阿里云服务器无法连接到远程计算机怎么解决问题

检查网络连接如果网络连接不稳定或者网络中断,则可能导致无法连接远程计算机。可以尝试重新启动网络连接,或者检查网络设置是否正确。如果网络设置不正确,可以尝试手动配置网络。检查网络设置检查网络设置可以帮助解决网络连接问题。可以查看服务器的IP地址、DNS服务器和端口等信息,确保它们的设置正确。如果网络设置不正确,可以尝试手
阿里云服务器无法连接到远程计算机怎么解决问题
2023-10-28

轻量应用服务器远程连接错误解决方法

1.检查网络连接首先,检查您的本地网络连接是否正常。如果您无法连接到互联网,那么您也无法连接到远程服务器。确保您的网络连接正常,然后尝试重新连接。2.检查防火墙设置如果您的网络连接正常,那么您需要检查您的防火墙设置。防火墙可能会阻止您的远程连接尝试。您需要确保您的防火墙允许远程连接。如果您不确定如何配置防火墙,请参考您的操作系统文档或联系您的系统管理员。3.检查SSH服务如果您的网络连
2023-10-26

远程连接轻量应用服务器错误解决方法

1.检查网络连接首先,确保您的设备已连接到互联网,并且网络连接稳定。您可以尝试使用其他设备连接到同一网络,以确定问题是否出在您的设备上。2.检查服务器设置确保您已正确配置远程连接轻量应用服务器的设置。检查以下几个方面:-确保您已正确设置服务器的IP地址和端口号。-确保您已启用远程连接选项,并且设置了正确的身份验证方式(如用户名和密码)。-检查防火墙设置,确保允许远程连接。3.检查应用程序和协议确保您使用的远...
2023-10-27

解决轻量应用服务器远程连接问题的方法

1.检查网络连接首先,确保你的计算机和轻量应用服务器都正常连接到互联网。检查你的网络连接是否正常,确保你的计算机可以访问其他网站和服务。如果你的网络连接有问题,你可能需要联系你的网络管理员或互联网服务提供商来解决问题。2.检查服务器设置如果你的网络连接正常,但仍无法远程连接到轻量应用服务器,那么可能是服务器设置的问题。确保你已经正确配置了服务器的网络设置和防火墙规则。你可以检查服务器的网络配置文件,如...
2023-10-27

轻量应用服务器远程连接不上的解决方法

1.检查网络连接首先,确保您的设备已连接到互联网。检查您的网络连接,确保您的设备已连接到可用的网络,并且网络连接稳定。2.检查服务器设置确保您已正确配置服务器的远程连接设置。检查以下几点:-确保您已启用远程连接选项。在服务器设置中,找到并启用远程连接选项。-检查服务器防火墙设置。确保您的服务器防火墙允许远程连接的流量通
2023-10-27

解决轻量应用服务器远程连接错误的方法

1.检查网络连接首先,确保你的设备已连接到互联网,并且网络连接稳定。你可以尝试使用其他设备连接到同一网络,以确定是否存在网络问题。2.检查服务器设置确保你已正确配置轻量应用服务器的远程连接设置。检查以下几点:-确保你已启用远程连接选项。有些服务器可能默认禁用了远程连接。-检查服务器的防火墙设置,确保允许远程连接的流量通
2023-10-27

编程热搜

目录