Python套接字用户输入另一个客户端,以便他们可以放置自己的ip和端口以与客户端连接

问题描述 投票:2回答:2

我目前正在使用套接字(通过服务器)将客户端变成客户端程序。整个想法是,作为客户端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 sockets tcp server endianness
2个回答
0
投票

实际上很好Pythonsocket模块具有以下选项:socket.sendto(bytes, address)(用于将数据发送到特定地址)和socket.recvfrom(bufsize[,flags])(用于接收数据+显示发送者)。我没有使用过它,所以我无法告诉他们如何将它们用作专业人士(如果我拼写正确)和专家。

更多信息见文献:

最新稳定的3倍(3.8)Click Here

2x(2.7)Click Here


0
投票

我尝试过使用它,但是不幸的是我无法弄清楚。

© www.soinside.com 2019 - 2024. All rights reserved.