2009-09-19 66 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