这是我的客户:
#CLIENT
import socket
conne = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conne.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
i=0
while True:
conne.connect ( ('127.0.0.1', 3001) )
if i==0:
conne.send(b"test")
i+=1
data = conne.recv(1024)
#print(data)
if data.decode("utf-8")=="0":
name = input("Write your name:\n")
conne.send(bytes(name, "utf-8"))
else:
text = input("Write text:\n")
conne.send(bytes(text, "utf-8"))
conne.close()
这是我的服务器:
#SERVER
import socket
counter=0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', 3001))
sock.listen(10)
while True:
conn, addr = sock.accept()
data = conn.recv(1024)
if len(data.decode("utf-8"))>0:
if counter==0:
conn.send(b"0")
counter+=1
else:
conn.send(b"1")
counter+=1
else:
break
print("Zero")
conn.send("Slava")
conn.close()
))
启动 Client.py 后出现此错误:
回溯(最近一次调用):文件“client.py”,第 10 行,位于
conne.connect ( ('127.0.0.1', 3001) ) OSError: [Errno 9] 错误的文件描述符
第一次输入后就会出现问题。
这个程序——聊天。服务器正在等待消息。客户端正在发送。
代码存在许多问题,但是,为了解决与回溯相关的问题,一旦连接关闭,套接字就无法重用,即您无法调用socket.connect()
在封闭的插座上。相反,您每次都需要创建一个新的套接字,因此将套接字创建代码移至循环中:
import socket
i=0
while True:
conne = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conne.connect(('127.0.0.1', 3001))
...
设置套接字选项SO_BROADCAST
在流套接字上没有影响,因此,除非您实际上打算使用数据报(UDP 连接),否则您应该删除对setsockopt()
.
至少还有一个问题是服务器在客户端向其发送用户名之前关闭连接。您在调试代码时可能会发现其他问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)