我正在担任密钥管理器,我需要程序A,B和KM才能相互通信。我想要的是让程序A托管B和KM的连接,以及让B连接到A并让KM连接到B。
我想要的是让程序A托管B和KM的连接,以及让B连接到A并让KM连接到B。目前,我在程序A的2个不同端口上创建了2个套接字(B分别为B和KM)。一个用于KM),我在B中有一个套接字+端口,允许KM连接到它,另一个端口+套接字将B连接到A,最后,在KM中,我同时连接到A和B,每个连接都有一个套接字和端口。我的计划是先运行A,然后运行B,以便它可以连接到A并开始侦听KM,然后将KM连接到它们两个。
KM代码:
TCP_IP = "127.0.0.1"
TCP_PORT_A = 50021
TCP_PORT_B = 50031
sockA = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockA
sockA.connect((TCP_IP, TCP_PORT_A))
print("conn to A")
sockB = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockB.connect((TCP_IP, TCP_PORT_B))
print("conn to B")
A的代码:
TCP_IP = "127.0.0.1"
TCP_PORT_REC_B = 50001
TCP_PORT_REC_KM = 50021
sockB = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockB.bind((TCP_IP, TCP_PORT_REC_B))
sockB.listen(1)
print('listening on ', (TCP_IP, TCP_PORT_REC_B))
connB, addrB = sockB.accept()
print("connection address B: ", addrB)
sockKM = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockKM.bind((TCP_IP, TCP_PORT_REC_KM))
sockKM.listen(1)
print('listening on ', (TCP_IP, TCP_PORT_REC_KM))
connKM, addrKM = sockKM.accept()
print("connection address K: ", addrKM)
B的代码:
TCP_IP = "127.0.0.1"
TCP_PORT_A = 50001
TCP_PORT_KM = 50031
sockA = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sockA.connect((TCP_IP, TCP_PORT_A))
print("connected to A")
sockKM = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockKM.bind((TCP_IP, TCP_PORT_KM))
print("listening")
sockKM.listen(1)
connKM, addrKM = sockKM.accept()
print("connection address k: ", addrKM)
我先运行A,然后B,B表示它已连接到A并开始监听,A不确定连接,我运行KM并得到:
sockA.connect((TCP_IP, TCP_PORT_A))
ConnectionRefusedError: [WinError 10061] No connection could be made
because the target machine actively refused it
答案 0 :(得分:0)
您的问题就在这里
sockA = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
除此套接字外,每个套接字都使用SOCK_STREAM
。在“ B代码”中。另外,您还有一行在“ KM代码”中仅显示sockA
。
编辑:如果您解决了该问题,则应该按照您的预期方式工作。我只是自己测试过。