用于在 python 中传输照片的套接字编程
socket programming for transferring a photo in python
我是 python 中的套接字编程新手。下面是在 Mininet 主机中打开 TCP 套接字并将照片从一台主机发送到另一台主机的示例。事实上,我已经更改了用于向另一台主机 (writing the received data to a text file) 发送简单消息的代码以满足我的要求。
但是当我 运行 这段代码时,我在发件人端遇到了这个错误:
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
怎么了?
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:
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()
好像是s.sendall()有问题,因为我改成s.send()的时候没有报错,照片传输成功了。所以我的问题是:虽然我在这个网站上的上一个问题中被建议使用 s.sendall() 而不是 s.send(),但不这样做是错误的吗?
发送所有数据后,您关闭了socket.And再次使用关闭的套接字,导致error.You可以这样写发送者。
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()
我是 python 中的套接字编程新手。下面是在 Mininet 主机中打开 TCP 套接字并将照片从一台主机发送到另一台主机的示例。事实上,我已经更改了用于向另一台主机 (writing the received data to a text file) 发送简单消息的代码以满足我的要求。 但是当我 运行 这段代码时,我在发件人端遇到了这个错误:
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
怎么了?
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:
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()
好像是s.sendall()有问题,因为我改成s.send()的时候没有报错,照片传输成功了。所以我的问题是:虽然我在这个网站上的上一个问题中被建议使用 s.sendall() 而不是 s.send(),但不这样做是错误的吗?
发送所有数据后,您关闭了socket.And再次使用关闭的套接字,导致error.You可以这样写发送者。
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()