【发布时间】:2017-05-17 21:15:19
【问题描述】:
我正在尝试创建一个简单的服务器到基于客户端的聊天程序,问题是当我尝试执行 c.sendto(data,client) 时出现此错误,说 Client 是一个 int 但它是一个包含端口号的元组和地址。我应该将元组转换为字节,以便将消息发送给客户端?
服务器脚本
import socket
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1",7999))
s.listen()
print("Waiting for connection")
c, addr = s.accept()
while True:
data , addr = c.recvfrom(1024)
print(data)
if addr not in clients:
clients.append(addr)
print(clients[0])
if data:
for client in clients:
print(client)
c.sendto(data,client)
s.close()
客户端脚本
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = ("127.0.0.1",7999)
s.connect(addr)
while True:
string = input(">>")
s.send(string.encode("utf-8"))
data =s.recv(1024)
s.close()
【问题讨论】:
-
似乎服务器在引发错误之前打印了两个客户端,好像您的最终for循环运行一次没有任何问题然后崩溃,您可以确认一下吗?
-
只是猜测,如果你设置
client[0] = str(client[0]),它会做什么? -
@Trolldejo 不,它只在同一个周期打印两次,我现在无法编辑我的代码,但会按照你的建议做。
-
那么第二个 print 在哪里调用?我建议您在 c.sendto() 下方也进行打印,以确保..
-
打印客户端[0] 与打印客户端相同,因为它是数组中的唯一项。
标签: python python-3.x wing-ide