2016-01-13 55 views
0

我是bluemix容器的新手。我已經創建了一個bluemix容器,並公開了udp客戶端服務器通信的端口5005。該端口無法從主機接收來自我的程序的消息。udp客戶端服務器程序與ibm bluemix容器的通信

下面是我創建的Docker文件。

FROM registry.ng.bluemix.net/ibmliberty:latest 
COPY pythonServer.py /home/ 
EXPOSE 9080 5005/udp 
# Run Liberty via the supervisor 
CMD ["/root/bin/run_supervisor"] 

我的Python UDP服務器程序:

import SocketServer 

class MyUDPHandler(SocketServer.BaseRequestHandler): 
    """ 
    This class works similar to the TCP handler class, except that 
    self.request consists of a pair of data and client socket, and since 
    there is no connection the client address must be given explicitly 
    when sending data back via sendto(). 
    """ 

    def handle(self): 
     data = self.request[0].strip() 
     socket = self.request[1] 
     print "{} wrote:".format(self.client_address[0]) 
     print data 
     socket.sendto(data.upper(), self.client_address) 

if __name__ == "__main__": 
    HOST, PORT = "0.0.0.0", 5005 
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler) 

    server.serve_forever() 

我的Python UDP客戶端程序

import socket 
import sys 

HOST, PORT = "134.168.20.209", 5005 
data = " ".join(sys.argv[1:]) 

# SOCK_DGRAM is the socket type to use for UDP sockets 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

# As you can see, there is no connect() call; UDP has no connections. 
# Instead, data is directly sent to the recipient via sendto(). 

while 1: 
    data = raw_input("Enter something: ") 
    print "you entered ", data 
    sock.sendto(data , (HOST, PORT)) 
    received = sock.recv(1024) 
    print "Sent:  {}".format(data) 
    print "Received: {}".format(received) 

我也暴露了端口5005,但它仍然無法與客戶端進行通信程序。有關爲什麼端口未在bluemix容器中暴露的問題?

回答

0

出於安全原因,有一組有限的端口可以從外部訪問。 UDP/TCP端口5005目前不包含在這個集合中。實際上現在沒有UDP端口被暴露。

我建議您打開Bluemix支持團隊的支持服務單,並要求打開此端口。

ibm.biz/bluemixsupport

+0

這對容器組和單個容器都適用嗎?我覺得這只是集裝箱集團的一個問題。 – bpulito

+0

是否在某處記錄了哪些端口和協議受支持? – bpulito

+0

這對單個容器有效。由於安全原因,沒有打開端口的文檔。 –