我正在服务器与客户端之间建立简单的套接字连接,当我想从客户端接收数据并将数据写入服务器Destkop上的文本文件时,我在行上遇到错误17 (data = sock.recv(1024)
)。
错误:
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.
服务器:
import socket
import os
import random
randomName = str(random.randint(100, 1001)) + 'data.txt'
FilePath = os.path.join(os.environ['USERPROFILE'], 'Desktop', randomName)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind((socket.gethostname(), 9889))
sock.listen(1)
conn, addr = sock.accept()
print(f'{addr} has connected to the server.')
with open(FilePath, 'wb') as f:
if not f.writable():
pass
else:
data = sock.recv(1024)
f.write(data)
exit(0)
客户
:我正在尝试发送计算机的主机名和密钥(密钥只是一个字符串)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((socket.gethostname(), 9889))
fromServer = sock.recv(1024)
try:
sock.send(socket.gethostname() + key)
except:
print('Cant send hostname and key')
答案 0 :(得分:0)
您的代码创建一个套接字对象,并将其绑定到端口9889上的地址作为套接字服务器。当客户端通过套接字连接连接到该地址时,服务器将侦听数据,并将其存储在“ data”变量中。
要接收数据,应使用已建立的连接而不是套接字。因此:
data = sock.recv(1024)
您应将sock
替换为conn