通过socket发送的图像作为二进制数据

问题描述:

我有一个多线程的回声服务器:通过socket发送的图像作为二进制数据

from socket import * 
import threading 
import thread 

def handler(clientsock,addr): 
    while 1: 
     data = clientsock.recv(BUFSIZ) 
     if not data: 
      break 
     msg = 'echoed:... ' + data 
     clientsock.send(msg) 
    clientsock.close() 

if __name__=='__main__': 
    HOST = 'localhost' 
    PORT = 21567 
    BUFSIZ = 1024 
    ADDR = (HOST, PORT) 
    serversock = socket(AF_INET, SOCK_STREAM) 
    serversock.bind(ADDR) 
    serversock.listen(2) 

    while 1: 
     print 'waiting for connection...' 
     clientsock, addr = serversock.accept() 
     print '...connected from:', addr 
     thread.start_new_thread(handler, (clientsock, addr)) 

我想在服务器转换为返回一个二进制图像,而不是原始消息,并相应修改客户端。

有人可以指点我一个例子吗?

+0

这让我想起了[15行python p2p-app](http://python.about.com/b /2007/09/18/the-worlds-tiniest-p2p-program.htm),也许你可以从中得到一些提示? [Here](http://www.exonsoft.com/~kochin/TinyP2P/tinyp2p.html)是一个注释版本。 – 2012-02-09 17:39:52

+0

为什么不从磁盘读取图像并按“原样”发送?它很可能会工作得很好。 – 2012-02-09 17:40:13

如果您的图像数据是字符串,您可以用clientsock.sendall(image_data)替换您的电话clientsock.send(msg)。您可以使用以下内容从文件中读取图像数据:

image = open('my_image.jpg', 'rb') 
image_data = image.read() 
image.close()