使用socket.getservbyport找不到grpc服务器

2024-04-29 01:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是与我的gRPC服务器(启用反射)进行通信,而客户端不熟悉服务器协议文件,因此我只需要使用端口号查找服务器

我正在尝试使用socket.getservbyport查找我的gRPC服务器,并获取“port/proto not found”异常。 我知道我的服务器已启动&;在这个端口上运行。我错过了什么

服务器端:

from concurrent import futures

import logging

import grpc
from grpc_reflection.v1alpha import reflection

import helloworld_pb2
import helloworld_pb2_grpc


class Greeter(helloworld_pb2_grpc.GreeterServicer):

    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)


def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    SERVICE_NAMES = (
        helloworld_pb2.DESCRIPTOR.services_by_name['Greeter'].full_name,
        reflection.SERVICE_NAME,
    )
    reflection.enable_server_reflection(SERVICE_NAMES, server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

客户端:

import socket


def find_service_name():

  for port in [25, 80, 50051]:

    print("Port: %s => service name: %s" % (port, socket.getservbyport(port)))


def run():

    try:
        find_service_name()
    except Exception as  e:
        print(e)

    with grpc.insecure_channel('localhost:50051') as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
        print(response)


if __name__ == '__main__':
    logging.basicConfig()
    run()

输出:

Port: 25 => service name: smtp
Port: 80 => service name: http
port/proto not found
message: "Hello, you!"

Tags: nameimport服务器grpcserverportdefservice
1条回答
网友
1楼 · 发布于 2024-04-29 01:51:49

Python的getservbyport是围绕同名系统调用的包装器(请参见relevant source code中的cpython)

系统调用(文档here)查看服务数据库:

The getservbyport() function returns a servent structure for the entry from the database that matches the port port ...

{}所指向的{a3}只是(引用):

a plain ASCII file providing a mapping between human-friendly textual names for internet services, and their underlying assigned port numbers and protocol types.

因此,您看到的是您的服务器没有出现在服务数据库中。这并不奇怪,因为AFAIK没有将您的服务添加到数据库中

相关问题 更多 >