创建套接字连接时,不允许接收数据的请求

时间:2020-01-11 13:19:19

标签: python

我正在服务器与客户端之间建立简单的套接字连接,当我想从客户端接收数据并将数据写入服务器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')

1 个答案:

答案 0 :(得分:0)

您的代码创建一个套接字对象,并将其绑定到端口9889上的地址作为套接字服务器。当客户端通过套接字连接连接到该地址时,服务器将侦听数据,并将其存储在“ data”变量中。

要接收数据,应使用已建立的连接而不是套接字。因此:

data = sock.recv(1024)

您应将sock替换为conn