2014-06-23 113 views
0

我已经在TCP中构建了客户端&服务器的程序。服务器屏幕截图并将图像发送到客户端。客户端尝试将此映像保存为二进制文件时,问题就开始了。 的唯一错误的显示出来是在客户端:通过TCP发送图像并保存

data.save(path) 

     TypeError: must be string or buffer, not tuple 

我究竟做错了什么?

感谢和抱歉我的英文不好。

服务器代码:

from socket import * 
    from PIL import Image 
    import StringIO 
    import ImageGrab 


    port =9999 

    print 'starting SERVER ... ' 
    sock = socket(AF_INET, SOCK_STREAM) 
    sock.bind(('', port)) # port to listen on 

    print 'starting to listen...' 
    sock.listen(SOMAXCONN) 
    client, addr = sock.accept() # when accepting a connection, we get a tuple - two different      variables with info about the new connection 
    print 'done listening!' 
    print 'client address is: ' + str(addr) 


    buf=StringIO.StringIO()#create buffer  

    img=ImageGrab.grab()#take screenshot 

    img.save(buf,format='PNG')#save screenshot to buffer 

    client.sendall(buf.getvalue()) 

    sock.close() 
    del sock 

客户端代码:

import socket 
    from PIL import Image 

    mySocket =None 
    ip='127.0.0.1' 
    port=9999   
    try : 
     print 'starting Client' 
     mySocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

     print 'trying to connet' 
     mySocket.connect((ip,port)) 
     print 'conneted successfuly!' 
    except socket.error,msg : 
     print 'Failed to create socket.Error code :' +str(msg[0])+'Error message:'+msg[1] 

    data=mySocket.recvfrom(4096) 

    path="D:\\Users\\user-pc\\Desktop\\bbbb.png" 
    newf=open(path,'wb') 
    newf.write(data) 


    mySocket.close() 
    del mySocket 

回答

0

这是因为data是一个元组。

返回值是一个对(字符串,地址),其中字符串是代表数据的字符串 接收和地址是 套接字发送的数据的地址。

https://docs.python.org/2/library/socket.html

所以,你可以这样做:

data, address = mySocket.recvfrom(4096)