Как сделать сокетную связь между основной машиной и контейнером - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть код клиента, который будет работать на основном компьютере. Я использую docker для запуска кода моего сервера. Но когда я запускаю свой серверный код, я не вижу, была ли выполнена какая-либо работа. Я печатаю результаты на экране, чтобы увидеть, были ли предприняты действия.

client.py

import socket
import time


def send_message(message):
   client_socket = ""
   print(message)
   try:
      host = "127.0.0.1"  # as both code is running on same pc
      port = 5050
      # time.sleep(15)
      client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # instantiate
      client_socket.connect((host, port))  # connect to the server
      client_socket.send(str(message).encode())
      # get_message = client_socket.recv(1024).decode()
      # print(get_message)
      # if get_message == 'True':
      #     client_socket.close()
      #     return True
      # else:
      #     client_socket.close()
      #     return False
      return True
   except ConnectionResetError as e:
      client_socket.close()
      print(e)
      return False
   except Exception as error:
      client_socket.close()
      print(error)


if __name__ == "__main__":
   print(send_message("Test Message"))

Server.py

#!/usr/bin/env python
import socket
import time

def app_server_program(server_socket):
   connection = ""
   try:
      while True:
         print("dinleme basladı")
         connection, address = server_socket.accept()  # accept new connection
         # time.sleep(5)
         # receive data stream. it won't accept data packet greater than 1024 bytes
         data = connection.recv(1024).decode()
         print(data)
         connection.close()
         if data:
             print("dataJson")
  except Exception as error:
    print(error)
    # app_server_program(server_socket)


def socket_connect():
  # get the hostname
  print("51")
  host = "0.0.0.0"
  port = 5003  # initiate port no above 1024
  # time.sleep(5)
  server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # get instance
  # look closely. The bind() function takes tuple as argument
  server_socket.bind((host, port))  # bind host address and port together

  # configure how many client the server can listen simultaneously
  server_socket.listen()
  print("60")
  app_server_program(server_socket)

if __name__ == "__main__":
    print("asfasd")
    # time.sleep(5)
    socket_connect()

My server.py и коды client.py такие же, как написанные выше.

Dockerfile

FROM python:3.6.5
COPY . /docker-socket
WORKDIR /docker-socket
CMD ["python3", "__init__.py"]

это файл dockerfile, который я использую.

docker run -p 5050:5003 <container-name>

Я запускаю docker в форма. Но я не вижу сообщение, которое я отправил на cmd. Случайно на server.py

print(datajson)

Когда я пишу неправильный код, я вижу отправленное сообщение и результат других функций печати. Но чтобы увидеть эти сообщения, мне нужно запустить файл client.py более одного раза. Есть ли шаг, который я сделал неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...