[英]socket programming for transferring a photo in python
I'm new to socket programming in python. 我是python套接字编程的新手。 Here is an example of opening a TCP socket in a Mininet host and sending a photo from one host to another.
这是在Mininet主机中打开TCP套接字并将照片从一台主机发送到另一台主机的示例。 In fact I have changed the code which I used to send a simple message to another host ( writing the received data to a text file ) in order to meet my requirements.
实际上,为了满足我的要求,我已经更改了用于向另一台主机发送简单消息( 将接收到的数据写入文本文件 )的代码。 But when I run this code, I encounter this error at sender side:
但是,当我运行此代码时,在发送方遇到此错误:
144
Traceback (most recent call last):
File mmyClient2,pym, line 13, in <module>
if(s.sendall(data)):
File m/usr/lib/python2.7/socket.pym, line 228, in meth
return yetattr[self,_sockename](*args)
File m/usr/lib/python2.7/socket.pym, line 174, in _dummy
raise error(EBADF, 'Bad file descriptor')
socket,error: [Errno 9] Bad file descriptor
So what's wrong? 那怎么了
Receiver.py Receiver.py
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('10.0.0.1', 12345))
buf = 1024
f = open("2.jpg",'wb')
s.listen(1)
conn , addr = s.accept()
while 1:
data = conn.recv(buf)
print(data[:10])
#print "PACKAGE RECEIVED..."
f.write(data)
if not data: break
#conn.send(data)
conn.close()
s.close()
Sender.py: Sender.py:
import socket
import sys
f=open ("1.jpg", "rb")
print sys.getsizeof(f)
buf = 1024
data = f.read(buf)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.0.0.1',12345))
while (data):
if(s.sendall(data)):
#print "sending ..."
data = f.read(buf)
#print(f.tell(), data[:10])
s.close()
There seems to be a problem with s.sendall(), because when I change it to s.send(), there is no error and photo transfer is successful. s.sendall()似乎有问题,因为当我将其更改为s.send()时,没有错误,并且照片传输成功。 So my question is: Although I was suggested to use s.sendall() instead of s.send() in my previous question on this site, Is it wrong not to do this?
所以我的问题是:尽管在此站点上的上一个问题中建议我使用s.sendall()而不是s.send(),但不这样做是错误的吗?
After send all data, you closed socket.And use closed socket again, that cause error.You can write sender like this. 发送完所有数据后,您关闭了套接字,然后再次使用关闭的套接字,这会导致错误。您可以像这样编写发送方。
import socket
import sys
f=open ("1.jpg", "rb")
print sys.getsizeof(f)
buf = 1024
data = f.read(buf)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.0.0.1',12345))
while 1:
if not data:
break
s.sendall(data)
data = f.read(buf)
s.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.