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

也可以充当客户端的Python服务器,python,python-3.x,sockets,tcp,Python,Python 3.x,Sockets,Tcp,我正在为一名关键经理工作,我需要项目a、B和KM相互沟通。我想要的是程序A为B和KM托管连接,B连接到A,让KM连接到B 我想要的是让程序A承载B和KM的连接,让B连接到A,让KM连接到B。现在我在程序A的两个不同端口上创建了两个套接字(一个用于B,一个用于KM),我在B中有一个套接字+端口,允许KM连接到它,另一个端口+套接字将B连接到A,最后,在KM i连接到A和B时,每个连接都有一个插座和端口。我的计划是先运行A,然后运行B,这样它就可以连接到A,开始监听KM,然后让KM连接到这两个 公里

我正在为一名关键经理工作,我需要项目a、B和KM相互沟通。我想要的是程序A为B和KM托管连接,B连接到A,让KM连接到B

我想要的是让程序A承载B和KM的连接,让B连接到A,让KM连接到B。现在我在程序A的两个不同端口上创建了两个套接字(一个用于B,一个用于KM),我在B中有一个套接字+端口,允许KM连接到它,另一个端口+套接字将B连接到A,最后,在KM i连接到A和B时,每个连接都有一个插座和端口。我的计划是先运行A,然后运行B,这样它就可以连接到A,开始监听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不确认连接,我运行公里,我得到:

sockA.connect((TCP_IP, TCP_PORT_A))
ConnectionRefusedError: [WinError 10061] No connection could be made                     
because the target machine actively refused it

你的问题就在这里:

sockA = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
除此之外,您的每个套接字都使用
SOCK\u STREAM
。在“B代码”中。另外,在“公里代码”中有一行只写着
sockA


编辑:如果您修复了该问题,则应按您预期的方式工作。我只是自己测试了一下

我最终重构了我的整个应用程序,我仍然使用了相同的概念(其中一个程序充当主机和客户端),但谢谢你的回答。我再次测试了上面的代码,这似乎就是问题所在。没问题,很抱歉你不得不等三个小时才得到答案,我的订阅源很晚才出现这个问题。祝你的应用程序其余部分好运。