首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gRPC客户端从iPhone C# gRPC服务器获得“连接被拒绝”

gRPC客户端从iPhone C# gRPC服务器获得“连接被拒绝”
EN

Stack Overflow用户
提问于 2021-02-13 04:48:37
回答 1查看 289关注 0票数 0

我有一个在Windows10中运行的用C#编写的gRPC服务器。我可以连接到它并使用同一台PC上的C# gRPC客户端调用服务,但当我尝试从在Swift中运行简单客户端的iPhone连接时,该应用程序报告

代码语言:javascript
复制
2021-02-12 12:28:48.639854-0800 grpc-Swift[53758:732067] [connection] nw_socket_handle_socket_event [C5:1] Socket SO_ERROR [61: Connection refused]

当我在Windows PC的同一端口上运行Golang服务器时,我可以从手机连接到Golang服务器,所以这不是布线或防火墙问题。我遗漏了什么??

.proto文件

代码语言:javascript
复制
syntax = "proto3";
package chat;

option go_package = "github.com/monkrus/grpc-from0;grpc_from0";

message Message{
    string body = 1;
}

service ChatService{
    rpc SayHello(Message) returns (Message) {}
}

c#服务器:

代码语言:javascript
复制
using System.Threading.Tasks;
using Chat;
using Grpc.Core;

namespace ChatServer {

    public class ChatServiceImpl : ChatService.ChatServiceBase {
        public override Task<Message> SayHello( Message request, ServerCallContext context ) {
            Message reply = new Message { Body = "Got it!" };
            return Task.FromResult( reply );
        }
    }

    class Program {
        static int port = 2319;

        static void Main( string[] args ) {
            Console.WriteLine( $"Starting Chat Server on port {port}" );
            Server server = new Server {
                Services = { ChatService.BindService( new ChatServiceImpl() ) },
                Ports = { new ServerPort( "localhost", port, ServerCredentials.Insecure ) }
            };
            server.Start();
            Console.WriteLine( "Server started.  Press any key to exit." );
            Console.ReadKey();
            server.ShutdownAsync().Wait();
        }
    }
}

iPhone客户端ViewController.swift:

代码语言:javascript
复制
import UIKit
import GRPC

class ViewController: UIViewController {

    var client:Chat_ChatServiceClient?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupConnection()
    }
    
    func setupConnection(){
        let eventGroup = PlatformSupport.makeEventLoopGroup(loopCount: 1)
        let channel = ClientConnection.insecure(group: eventGroup).connect(host:
            "192.168.86.44", port: 2319 )
        self.client = Chat_ChatServiceClient(channel: channel)
    }
    
    @IBAction func sendMessage(){
        createMessage()
    }
    
    func createMessage(){
        var message = Chat_Message()
        message.body = "Hello from swift"
        let x = client?.sayHello(message).response
        x?.whenSuccess({ (message) in print("response from server: \(message.body)") })
    }
}

在Windows上工作的golang服务器:

代码语言:javascript
复制
package main

import (
    "log"
    "net"
    "fmt"
    "go-grpc-tutorial/chat"
    "google.golang.org/grpc"
)

func main() {
    fmt.Println( "Listening on port 2319..." )
    lis, err := net.Listen("tcp", ":2319")
    if err != nil {
        log.Fatalf("Failed to listen on port 2319: %v", err)
    }

    s := chat.Server{}
    grpcServer := grpc.NewServer()
    chat.RegisterChatServiceServer(grpcServer, &s)

    if err := grpcServer.Serve(lis); err != nil {
        log.Fatalf("Failed to serve grpc server over port 2319: %v", err)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-13 07:29:41

找到了!我将服务器初始化从

代码语言:javascript
复制
Ports = { new ServerPort( "localhost", port, ServerCredentials.Insecure )

代码语言:javascript
复制
Ports = { new ServerPort( "0.0.0.0", port, ServerCredentials.Insecure )

并且所有的工作都像预期的那样。

如果我在客户机的网络上使用服务器的IP地址-即"192.168.86.44“,它也可以工作。我很想知道这个数字是如何解释的--如果"localhost“是一个不同于客户端的网络?如果"0.0.0.0“只是一个通配符...?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66178829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档