为什么文件不能完全传输? Python套接字编程

时间:2015-10-05 23:10:39

标签: python sockets

我遇到的问题是从服务器获取文件。让我们说我想 “get ./testing.pdf”将pdf从服务器发送到客户端。它发送但总是丢失字节。我如何发送数据有任何问题。如果是这样,我该如何解决?我省略了其他功能的代码,因为它们不用于此功能。

server.py

import socket, os, subprocess          # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
#host = ''
port = 5000                # Reserve a port for your service.
bufsize = 4096
s.bind((host, port))        # Bind to the port
s.listen(5)                 # Now wait for client connection.

while True:
    c, addr = s.accept()     # Establish connection with client.
    print 'Got connection from', addr

    while True:
      userInput = c.recv(1024)


    .... CODE ABOUT OTHER FUNCTIONALITY

      elif userInput.split(" ")[0] == "get":
      print "inputed get"
      somefile = userInput.split(" ")[1]
      size = os.stat(somefile).st_size
      print size
      c.send(str(size))

      bytes = open(somefile).read()
      c.send(bytes)
      print c.recv(1024)

c.close()  

client.py

import socket, os               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
#host = '192.168.0.18'
port = 5000                # Reserve a port for your service.
bufsize = 1

s.connect((host, port))

print s.recv(1024)
print "Welcome to the server :)"

while 1 < 2:
    userInput = raw_input()

   .... CODE ABOUT OTHER FUNCTIONALITY

    elif userInput.split(" ")[0] == "get":
        print "inputed get"
        s.send(userInput)
        fName = os.path.basename(userInput.split(" ")[1])
        myfile = open(fName, 'w')
        size = s.recv(1024)
        size = int(size)
        data = "" 

        while True:
            data += s.recv(bufsize)
            size -= bufsize
            if size < 0: break
            print 'writing file .... %d' % size

        myfile = open('Testing.pdf', 'w')
        myfile.write(data)
        myfile.close()
        s.send('success')

 s.close 

0 个答案:

没有答案