[英]Python - Sending files over sockets
我一直在尝试实现一个小型的SERVER - CLIENT应用程序但是跑进了一个错误:
socket.error:[Errno 10057]不允许发送或接收数据的请求,因为没有连接套接字(当使用sendto调用在数据报套接字上发送时)没有提供地址
服务器:
class Server:
gate = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 0
file = ''
def __init__(self, port):
self.port = port
self.gate.bind((self.host, self.port))
self.listen()
def listen(self):
self.gate.listen(10)
while True:
add = self.gate.accept()
self.reciveFileName()
self.reciveFile()
def reciveFileName(self):
while True:
data = self.gate.recv(1024)
self.file = data
def reciveFile(self):
createFile = open("new_"+self.file, "wb")
while True:
data = self.gate.recv(1024)
createFile.write(data)
createFile.close()
a = Server(1111)
客户:
class Client:
gateway = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#host = socket.gethostname()
host = ''
port = 0
file = ''
def __init__(self, host, port, file):
self.port = port
self.host = host
self.file = file
self.connect()
def connect(self):
self.gateway.connect((self.host, self.port))
self.sendFileName()
self.sendFile()
def sendFileName(self):
self.gateway.send("name:" + self.file)
def sendFile(self):
readByte = open(self.file, "rb")
data = readByte.read()
readByte.close()
self.gateway.send(data)
self.gateway.close()
a = Client('93.103.56.251', 1111, 'data.txt')
服务器具有一个用于accept
传入连接的服务器套接字,以及用于每个连接的另一个套接字。 从您的代码:
self.gate.listen(10)
while True:
add = self.gate.accept()
self.reciveFileName() # which calls self.gate.recv()
而不是在reciveFilename
和reciveFile
上运行reciveFile
(顺便说一句, receive
正确的拼写),你应该使这些方法在接受的连接上运行,如下所示:
def listen(self):
self.gate.listen(10)
while True:
conn,address = self.gate.accept()
self.receiveFilename(conn)
def receiveFilename(self, sock):
buf = sock.recv(1024)
print('First bytes I got: ' + buf)
此外, reciveFilename
当前在套接字上永远侦听。 相反,您必须设计一个适当的协议,指定文件名何时结束并开始文件内容。 例如,您可以让文件名以b'\\0'
结尾,让服务器搜索该字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.