gpt4 book ai didi

Python 点对点聊天(套接字)

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:14 25 4
gpt4 key购买 nike

我的任务是创建一个点对点聊天应用程序,但我在实际发送消息时遇到了问题。

本质上,应该提示用户输入他们想要连接的人的 IP 和端口,然后连续发送/接收消息。

但是,似乎在运行程序后立即建立了“随机”连接。

错误:

Please enter the address you would like to connect on: 127.0.0.1
Please enter the port you would like to connect on: 5000
You: Established connection with: ('127.0.0.1', 2811)

为什么2811端口有连接?几乎就像程序正在连接到自身一样。

代码:

import socket
import threading

LOCALHOST = '127.0.0.1'
BUFFER_SIZE = 1024

def main():

class ChatListener(threading.Thread):

def __init__(self):
threading.Thread.__init__(self)
self.port = None

def run(self):
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.bind((LOCALHOST, self.port))
listen_socket.listen(1)

while True:

connection, address = listen_socket.accept()

print("Established connection with: ", address)

message = connection.recv(BUFFER_SIZE)
print("Them: ", message)

class ChatSender(threading.Thread):

def __init__(self):
threading.Thread.__init__(self)
self.address = None
self.port = None

def run(self):
send_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
send_socket.connect((self.address, self.port))

while True:

message = input("You: ")

if message.lower() == "quit":
break
else:
try:
send_socket.sendall(message)
except:
Exception

ip = input("Please enter the address you would like to connect on: ")
port = int(input("Please enter the port you would like to connect on: "))

chat_listener = ChatListener()
chat_listener.port = port
chat_listener.start()

chat_sender = ChatSender()
chat_sender.address = ip
chat_sender.port = port
chat_sender.start()

if __name__ == "__main__":
main()

最佳答案

这是对套接字和端口的误解。服务器 (ChatListener) 在端口 5000 上监听连接。假设 127.0.0.1:5000 是服务器的电话号码。然而,客户端 (ChatSender) 可以自由使用它想要的任何端口,并且通常会选择一个没有分配给其他东西的端口。客户端将有一个不同的“电话号码”来调用。您看到的打印内容不是服务器的“电话号码”(127.0.0.1:5000),而是来电的“调用者 ID”(127.0.0.1:2811),它不在同一端口上。

这是一个说明性的例子。想象一下,发件人实际上在不同的机器上,使用不同的 IP 地址,比如 127.0.0.2。客户端启动套接字,尝试连接到 127.0.0.1:5000。它分配一个杂项端口,比如 2811 来建立连接。如果成功,服务器连接到 127.0.0.2:2811。任何时候客户端想要发送一些数据,它都会将它发送到 127.0.0.1:5000。然而,任何时候服务器想要将数据发送回客户端,它都会在 127.0.0.2:2811 上这样做。如果这个例子不清楚,请告诉我,我会尝试进一步澄清。

关于Python 点对点聊天(套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com