我试图通过python套接字传递图像以获得较小的图像,但是对于较大的图像,它会产生错误
socket.error:[Errno 10040]在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或者用于接收数据报的缓冲区小于数据报本身
我在用
socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
谢谢你的任何线索.
我尝试使用SOCK_STREAM,它不起作用..它只是说我开始......然后挂掉了.没有输出..它不会出现发送功能
import thread import socket import ImageGrab class p2p: def __init__(self): socket.setdefaulttimeout(50) #send port self.send_port = 3000 #receive port self.recv_port=2000 #OUR IP HERE self.peerid = '127.0.0.1:' #DESTINATION self.recv_peers = '127.0.0.1' #declaring sender socket self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM ) self.socket.bind(('127.0.0.1', self.send_port)) self.socket.settimeout(50) #receiver socket self.serverSocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) self.serverSocket.bind(('127.0.0.1', self.recv_port)) self.serverSocket.settimeout(50) #starting thread for reception thread.start_new_thread(self.receiveData, ()) #grabbing screenshot image = ImageGrab.grab() image.save("c:\\test.jpg") f = open("c:\\ test.jpg", "rb") data = f.read() #sending self.sendData(data) print 'sent...' f.close() while 1: pass def receiveData(self): f = open("c:\\received.png","wb") while 1: data,address = self.serverSocket.recvfrom(1024) if not data: break f.write(data) try: f.close() except: print 'could not save' print "received" def sendData(self,data): self.socket.sendto(data, (self.recv_peers,self.recv_port)) if __name__=='__main__': print 'Started......' p2p()
sth.. 5
您的图像太大,无法在一个UDP数据包中发送.您需要将图像数据拆分为多个单独发送的数据包.
如果您没有特殊原因使用UDP,您也可以通过指定socket.SOCK_STREAM
而不是使用TCP socket.SOCK_DGRAM
.在那里,您不必担心数据包大小和排序.
您的图像太大,无法在一个UDP数据包中发送.您需要将图像数据拆分为多个单独发送的数据包.
如果您没有特殊原因使用UDP,您也可以通过指定socket.SOCK_STREAM
而不是使用TCP socket.SOCK_DGRAM
.在那里,您不必担心数据包大小和排序.