我目前正在使用套接字(通过服务器)将客户端变成客户端程序。整个想法是,作为客户端1,您连接到服务器(获取欢迎消息并确保已连接),然后在消息中加载信息(名称,地址等),然后通过该服务器将其发送给另一个客户端。然后,客户端2应该接收到消息,将消息详细信息修改为自己的消息(在这种情况下,使用不同的名称和地址等)将其发送回服务器,然后再返回给客户端1。主机。
该服务器来自我的学校,我用来将信息发送到该服务器,以便将其重定向到其他客户端。我实际上不是希望使用本地主机,而是希望接收客户端可以放置自己的IP和端口,以便运行我的代码的任何设备都可以放置其IP和端口,然后接收并向我发送消息。最好只有一个简单的输入选项。
这是我建立连接的地方。
import socket
import sys
import json
class Clients:
# school ip = xxx.xxx.xxx.xxx xxxx
def __init__(self, *args):
if len(args) < 2:
self.host = '127.0.0.1'
self.port = 12345
else:
self.host = args[0]
self.port = int(args[1])
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.reconnect = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.local_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.local_ip = '127.0.0.1'
self.local_port = 12345
((应根据用户输入更改本地ip和端口。)
def send_message_to_client_2(self):
self.server2.connect((self.local_ip, self.local_port))
print("Connected to client 2!")
self.server2.sendall(self.message2.encode('utf-8'))
print("Your message has been sent to client 2!")
这是客户端2的代码,它允许与客户端1进行连接,并在其中接收消息并发送自己的消息。
def client_2_connection(self):
#client 1 and client 2 get connected here.
self.local_server.bind(('127.0.0.1', 12345))
self.local_server.listen(5)
message_received = False
while message_received == False:
inputs = [self.local_server]
c, addr = self.local_server.accept()
print("Client 2 connected from: ", addr)
self.msg = c.recv(1024).decode('utf-8')
print("\nThe Message received from client 1 is:", self.msg)
message_received = True
c.shutdown(socket.SHUT_RDWR)
c.close()
self.client_2()
if __name__ == "__main__":
if len(sys.argv) > 1:
client1 = Clients(*sys.argv[1:3])
client1.client_1()
else:
client2 = Clients()
client2.client_2_connection()
所以我的问题是,如何允许客户端2在用户输入中放置自己的IP和端口,以便我连接到该IP和端口,而不是本地主机?任何用户都应该能够键入自己是客户端1(发送方)还是客户端2(接收方)的信息,并且在他们选择客户端2的情况下,他们应该能够执行我上面所说的?
非常感谢您阅读。这不是完整的代码,因此如果需要,请告诉我。
实际上很好Python
的socket
模块具有以下选项:socket.sendto(bytes, address)
(用于将数据发送到特定地址)和socket.recvfrom(bufsize[,flags])
(用于接收数据+显示发送者)。我没有使用过它,所以我无法告诉他们如何将它们用作专业人士(如果我拼写正确)和专家。
更多信息见文献:
最新稳定的3倍(3.8)Click Here
2x(2.7)Click Here
我尝试过使用它,但是不幸的是我无法弄清楚。