gpt4 book ai didi

python - 简单的Python 3聊天;同时发送和接收

转载 作者:行者123 更新时间:2023-12-03 12:09:25 26 4
gpt4 key购买 nike

我是Python的初学者,今天我尝试创建一个简单的聊天程序。到目前为止,它还算不错,但是我无法在服务器和客户端之间进行通信。我只能从服务器发送到客户端,而不能从其他方向发送。我尝试了多线程,结果如下:

服务器:

import socket
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "127.0.0.1"
port = 4444

s.bind((host, port))
s.listen(3)

conn, addr = s.accept()
print("Connection from: "+str(addr[0])+":"+str(addr[1]))

def recv_data():
while True:
data = s.recv(2048).decode('utf-8')
print(data)

def send_data():
while True:
msg = input(str(socket.gethostname())+"> ")
msg = str(host + "> ").encode('utf-8') + msg.encode('utf-8')
conn.send(msg)

#t1 = threading.Thread(target=recv_data)
t2 = threading.Thread(target=send_data)
#t1.start()
t2.start()

客户:
import socket
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "127.0.0.1"
port = 4444

s.connect((host, port))
print("Connected to: "+ host)

def recv_data():
while True:
data = s.recv(2048)
data = data.decode('utf-8')
print(data)

def send_data():
while True:
msg = input(str(host)+"> ").encode('utf-8')
s.send(msg)

t1 = threading.Thread(target=recv_data)
#t2 = threading.Thread(target=send_data)
t1.start()
#t2.start()

此代码有效;服务器可以发送,客户端可以接收,但是每当我取消第二个线程的注释时,它都可以执行以下操作:
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected  and (when sending on a datagram socket using a sendto call) no address was supplied

我似乎找不到解决方案,请帮忙,我做错了什么? :D

最佳答案

conn, addr = s.accept()

def recv_data():
while True:
data = s.recv(2048).decode('utf-8')
print(data)

conn实际上是您想要 sendrecv的套接字。发生此错误是因为您试图从服务器套接字中添加 recv,这是非法操作。因此,如果要使其工作,则需要将 s更改为 conn

关于python - 简单的Python 3聊天;同时发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442472/

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