我有这个python服务器:
import SocketServer
class TCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
print 'client is connected'
data = self.request.recv(1024)
print data
self.request.sendall('Message received!')
HOST, PORT = '0.0.0.0', 5004
server = SocketServer.TCPServer((HOST, PORT), TCPHandler)
print 'Listening on port {}'.format(PORT)
server.serve_forever()
和这个客户:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.56.101', 5004))
s.sendall('Hello my name is John')
response = s.recv(1024)
print 'Response: {}'.format(response)
我的操作系统是macOS,我使用VirtualBox在虚拟机上安装了Ubuntu 14.04。在VirtualBox中,我设置了一个NAT网络,我给了Ubuntu这个IP地址:192.168.56.101
。我把服务器程序放在Ubuntu上并在IPTables中添加一条规则以允许来自端口5004的传入连接。我在Ubuntu上启动了服务器,我尝试使用上面的客户端在我的macOS上连接到服务器。连接完成,数据交换成功完成。
现在问题。我在我的虚拟化Ubuntu上安装了Docker。 Docker本身使用另一个版本的Ubuntu 14.04。我想要的是在Dockized版本的Ubuntu中运行服务器,所以我写了这个Dockerfile:
FROM bamos/ubuntu-opencv-dlib-torch:ubuntu_14.04-opencv_2.4.11-dlib_19.0-torch_2016.07.12
ADD . /root
EXPOSE 5004
CMD ["python2", "/root/server.py"]
我使用此命令构建它:sudo docker build -t boring91/mock
并且它已成功构建。我使用以下命令运行Docker容器:sudo docker run -p 5004:5004 -t boring91/mock
它显示它已开始侦听端口5004.当我尝试使用我的macOS上的客户端连接到它时,套接字连接但没有发生数据交换。当我在虚拟化的Ubuntu上运行客户端时,会发生同样的事情。能不能告诉我这里的问题是什么?