使用python从本地向服务器发送文件 - 正确的方式

时间:2015-10-22 14:41:54

标签: python sockets

对于那些过去常常使用socket模块的人来说,这可能是一个简单的问题。但到目前为止我还没理解为什么我不能发送一个简单的文件。

据我所知,当我们通过套接字发送信息时,有四个重要步骤:

  • 打开插座
  • 结合
  • 接受(可能需要多次)。

现在,我想要做的是在我的本地计算机上创建一个文件并填充一些信息。 (去过那里,做到了 - 到目前为止都很好)

然后,我创建了我的客户端流程,如下所示:

s = socket.socket() # create a socket
s.connect(("localhost", 8081)) # trying to connect to connect over 8081 port

f = open("logs.txt", "rb+") # I'm opening the file that contains what I want
l = f.read(1024) # I'm reading that file

# I'm sending all the info from the file
while l:
    s.send(l)
    l = f.read(1024)
s.close()

当然,首先,我正在创建一个服务器(首先,在我的localhost上),它将打开该端口并基本上创建连接,这将允许发送字节块数据。

import socket
import sys

s = socket.socket() # create the socket
s.bind(("localhost", 8081)) # bind
s.listen(10)

while True:
    sc, address = s.accept()
    print sc, address
    f = open('logs_1.txt', 'wb+') # trying to open a new file on the server ( which in this case is also my localhost )
    while True: # write all the data to the file and close everything
        l = sc.recv(1024)
        f.write(l)
        l = sc.recv(1024)
        while l:
            f.write(l)
            l = sc.recv(1024)
    f.close()
    sc.close()
s.close()

现在,什么在我的Ubuntu 14.10机器上不起作用:

  • 执行python server.py
  • 时,服务器部分运行时没有错误
  • 客户端脚本完成在logs.txt中写入一些数据并连接到服务器后,我在服务器上得到以下响应:

    <socket._socketobject object at 0x7fcdb3cf4750> ('127.0.0.1', 56821)
    

我做错了什么?该端口也与我设置的端口不同(我也知道端口未使用 - 验证nc)。

有人能解释我如何正确对待这个问题吗?

1 个答案:

答案 0 :(得分:2)

我不确定你的第二个while True循环是什么。删除它,它按预期工作:

import socket
import sys

s = socket.socket() # create the socket
s.bind(("localhost", 8081)) # bind
s.listen(10)

while True:
    sc, address = s.accept()
    print sc, address
    f = open('logs_1.txt', 'wb+')
    l = sc.recv(1024)
    while l:
        f.write(l)
        l = sc.recv(1024)
    f.close()
    sc.close()
s.close()