Joe*_*e N 5 python sockets networking python-3.x docker
在码头工人网络中,我试图使用python套接字在两个容器之间进行通信(发送数据包)。Pinging有效,但是python sockets库不起作用。
错误:
line 6: conn, addr = sock.connect(('172.168.1.2', 4000))
TypeError: 'NoneType' object is not iterable
首先python3 receive.py在container1中运行。然后在容器2中运行python3send.py。容器1显示“ accepted”,然后不显示其他任何内容。如上所述的容器2错误。
该网络是用户定义的网络,具有自己的子网和默认网关。当我使用相同的确切代码连接到树莓派时,不会发生此错误,但是与容器通信时会出错。
所有代码:
container1:
import socket
def receive():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 4000))
s.listen(2)
conn, addr = s.accept()
print("accepted")
print(bytes.decode(conn.recv(1024)))
Run Code Online (Sandbox Code Playgroud)
容器2:
import socket
def send():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
command = "bridge test!"
conn, addr = sock.connect(('172.168.1.2', 4000))
conn.sendall(command)
Run Code Online (Sandbox Code Playgroud)
设置网络:
docker network create --subnet 172.168.1.0/24 testNetwork
docker network connect testNetwork container1
docker network connect testNetwork container2
Run Code Online (Sandbox Code Playgroud)
我从docker inspect获得了容器的IP地址(以及对其进行ping操作),请帮忙!谢谢!
你有几个问题。
socket.connect不返回任何内容。它返回None。您认为它返回一个元组conn, addr。Python 尝试通过迭代元组来解构返回到元组中的任何内容,并且您会收到错误:
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)socket.sendall 接受字节而不是str. 转换依据
sock.sendall(command.encode())
Run Code Online (Sandbox Code Playgroud)这是固定的send.py:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
command = "bridge test!"
x, y = sock.connect(('172.168.1.2', 4000))
sock.sendall(command.encode())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2304 次 |
| 最近记录: |