Android(Kotlin)中SignalR始终DISCONNECTED,无法连接.NET 6服务器
Android(Kotlin) SignalR无法连接本地.NET 6服务器,始终处于DISCONNECTED状态
我在Android(Kotlin)项目中使用依赖 implementation 'com.microsoft.signalr:signalr:6.0.8',后端采用.NET 6,但模拟器无法连接本地服务器(localhost)。通过编写函数检查hubConnection.connectionState,发现其始终处于DISCONNECTED状态,且未出现任何报错。Web(React)端可正常与该后端交互。
SignalRListener代码
import com.microsoft.signalr.Action1 import com.microsoft.signalr.HubConnection import com.microsoft.signalr.HubConnectionBuilder import com.microsoft.signalr.HubConnectionState import io.reactivex.rxjava3.core.Single import org.slf4j.Logger import org.slf4j.LoggerFactory class SignalRListener private constructor(){ private var hubConnection: HubConnection private var logger: Logger init { logger = LoggerFactory.getLogger(HubConnection::class.java) // define in constructor hubConnection = HubConnectionBuilder.create("http://10.0.2.2:5291/hubs/presence") .withAccessTokenProvider(Single.defer { Single.just("${Constanst.TOKEN}") }) .build() hubConnection.on("UserIsOnline", Action1 { member: Member -> println(member.DisplayName + "online") }, Member::class.java ) hubConnection.on("UserIsOffline", Action1 { username: String -> println(username+" offline") }, String::class.java ) hubConnection.on( "GetOnlineUsers", Action1 { usersOnline : List<Member> -> for (item in usersOnline) { println(item.DisplayName) } }, List::class.java ) hubConnection.start().doOnError({ logger.info("Client connected error.") }) } private object Holder { val INSTANCE = SignalRListener() } companion object { @JvmStatic fun getInstance(): SignalRListener{ return Holder.INSTANCE } } fun stopHubConnection(){ if(hubConnection.connectionState == HubConnectionState.CONNECTED){ hubConnection.stop() } } fun getConnectionState(){ println(hubConnection.connectionState.toString()) } fun log(){ logger.info("Debug infor siganlR {}", hubConnection.connectionId) } }
Web(React)端可正常连接该后端。
MainActivity代码
class MainActivity : AppCompatActivity() { lateinit var signalR: SignalRListener; var btnCheck: Button? = null var btnLog: Button? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) signalR = SignalRListener.getInstance() btnCheck = findViewById(R.id.btnCheck) btnCheck?.setOnClickListener { signalR.getConnectionState() } btnLog = findViewById(R.id.btnLog) btnLog?.setOnClickListener { signalR.log() } } }
内容的提问来源于stack exchange,提问作者NamNguyen
相关产品推荐
相关产品推荐

