也可以充当客户端的Python服务器

时间:2019-01-08 15:48:02

标签: python python-3.x sockets tcp

我正在担任密钥管理器,我需要程序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

1 个答案:

答案 0 :(得分:0)

您的问题就在这里

sockA = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

除此套接字外,每个套接字都使用SOCK_STREAM。在“ B代码”中。另外,您还有一行在“ KM代码”中仅显示sockA

编辑:如果您解决了该问题,则应该按照您的预期方式工作。我只是自己测试过。