Проблема при подключении клиентского сокета к серверному сокету

#python #sockets #networking #network-programming #zeromq

#python #сокеты #сеть #сетевое программирование #zeromq

Вопрос:

У меня есть сервер, работающий на настольном компьютере с IP-адресом 192.168.1.11, и клиентский код выполняется на сервере, доступ к которому осуществляется через OpenVPN connect. Когда я запускаю приведенный ниже код, клиент отправляет запрос, но сервер его не получает.

Server.py:

 context=zmq.Context()
socket=context.socket(zmq.REP)
socket.bind("tcp://*:8080")
while True:
  message=socket.recv_pyobj()
  print("%s:%s" %(message.get(1)[0],message.get(1)[1]))
  socket.send_pyobj({1:[message.get(1)[0],message.get(1)[1]]})
 

Client.py

 socket=context.socket(zmq.REQ)
socket.connect("tcp://192.168.1.11:8080")
name="Test"
while True:
   message=input("Test Message")
   socket.send_pyobj(({1:[name,message]}))
 

Спасибо, помощь высоко ценится.

Ответ №1:

Вопрос: «Проблема при подключении клиентского сокета к серверному сокету»

Шаг 0: доказательство того, что была достигнута видимость OSI-ISO-Layer-3 traceroute <targetIP>

Шаг 1: получив видимый маршрут <targetIP> , исправьте код, чтобы он соответствовал документированным REQ/REP свойствам

Шаг 2: получив видимый маршрут к <targetIP> и REQ/REP , мы должны повысить надежность кода

 context = zmq.Context()
socket  = context.socket( zmq.REP )
socket.bind( "tcp://*:8080" )
#---------------------------------------------- # ROBUSTNESS CONFIGs
socket.setsockopt( zmq.LINGER,     0   )        # .set explicitly
socket.setsockopt( zmq.MAXMSGSIZE, ... )        # .set safety ceiling
socket.setsockopt( ...,            ... )        # .set ...
#---------------------------------------------- # ROBUSTNESS CONFIGs

while True:
    message = socket.recv_pyobj()            # .recv() a request from REQ-side
    print( "%s:%s" % ( message.get(1)[0],    #         shall improve robustness
                       message.get(1)[1]     #         for cases other than this
                       )
           )
    socket.send_pyobj( { 1: [ message.get(1)[0], # REP must "answer" to REQ
                              message.get(1)[1]
                              ]
                         }
                  )
 

 TARGET_IP   = "<targetIP>"                      # <targetIP> from Step 0
PORT_NUMBER = 8080

socket = context.socket( zmq.REQ )
socket.connect( "tcp://{0:}:{1:}".format( TARGET_IP, PORT_NUMBER ) )
#---------------------------------------------- # ROBUSTNESS CONFIGs
socket.setsockopt( zmq.LINGER,     0   )        # .set explicitly
socket.setsockopt( zmq.MAXMSGSIZE, ... )        # .set safety ceiling
socket.setsockopt( ...,            ... )        # .set ...
#---------------------------------------------- # ROBUSTNESS CONFIGs

name = "Test"
while True:
    message = input( "Test Message" )
    socket.send_pyobj( ( { 1: [ name,           # REQ-side sends a request
                                message         #                  here
                                ]               #          bearing a tuple
                           }                    #             with a dict
                         )                      #           having a list
                       )                        #              for a single key
    #------------------------------------------ # REQ-side now MUST also .recv()
    _ = socket.recv()                           #          before it can .send() again
 

Комментарии:

1. Спасибо за вашу помощь @user3666197 и указал мне правильное направление, основываясь на вашем предложении, я использовал traceroute и узнал, что мои пакеты блокируются брандмауэром.