2009-09-19 64 views
1

我试图越过较小的图像蟒蛇插座的图像,它工作正常,但对于更大的图像提示错误为错误试图通过套接字传递(大)图像在python

socket.error:[错误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() 

回答

5

您的图像太大而无法在一个UDP数据包中发送。您需要将图像数据分成几个单独发送的数据包。

如果您没有特别的理由使用UDP,您也可以通过指定socket.SOCK_STREAM而不是socket.SOCK_DGRAM来使用TCP。在那里你不必担心数据包的大小和顺序。

+0

我尝试使用SOCK_STREAM,但它不会发送函数。我用实际程序更新了我的问题。我承认不知道如何使用它。是否有任何其他更改需要使用SOCK_STREAM,谢谢 – Xinus 2009-09-19 06:06:46

+0

它的工作现在我尝试了程序在http://docs.python.org/library/socket.html – Xinus 2009-09-19 08:21:11