如何在主机和容器之间进行套接字通信

时间:2020-02-26 11:40:03

标签: python docker

我有一个可以在主机上工作的客户端代码。我使用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()

我的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文件。 我做错了什么步骤吗?

0 个答案:

没有答案
相关问题