对于那些过去常常使用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
)。
有人能解释我如何正确对待这个问题吗?
答案 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()