2012-09-18 117 views
0

我正在与Android.Net(C#)合作。我想通过TCP socket将一些图像(PNG)从Android发送到PC,但PC总是只接收1张图像。请帮帮我!通过TCP发送多个图像?

的Android代码(此代码是一个方法里面,我把它称为多次):

outputStream = socket.getOutputStream(); 
    File f = new File(filePath); 

    byte[] buffer = new byte[(int) f.length()]; 
    FileInputStream fis = new FileInputStream(f); 
    BufferedInputStream bis = new BufferedInputStream(fis); 
    bis.read(buffer, 0, buffer.length); 
    outputStream.write(buffer, 0, buffer.length); 
    outputStream.flush(); 
    outputStream.close(); 

C#代码(我也把这个代码很多次也让图像):

Socket s = 
     new Socket(
     AddressFamily.InterNetwork, 
     SocketType.Stream, 
     ProtocolType.Tcp); 
    s.Connect(new IPEndPoint(IPAddress.Parse(txtIPAddress.Text), 8002)); 
    Bitmap bitmap = new Bitmap(new NetworkStream(s)); 

UPDATE:我的Android应用程序将需要截屏的时间按时间,然后传输到PC代理查看。因此,为每个捕获的图像创建一个单独的套接字会带来不便。对?

+0

你的意思是你创建/建立新的套接字连接发送每个图像? –

+0

也许你可以用http POST发送你的图像,并且简单轻便。 –

+0

我不想为每个图像创建新的套接字。我只想使用一个套接字来传输它们。 –

回答

1

您目前的设计可能只处理一张图片。 请设计你的协议格式。 例如,

没有。 (4字节),长度1(4字节),图像数据1(N1字节),长度2,图像数据2(N2字节),...,长度n(4字节),图像数据n(Nn字节)

0

您只是一次向流中写入一个图像并关闭它。根据提示android发送图像的方式,您可能会启动该过程并且只会一次又一次地写入相同的第一张图像。

你可以尝试linquize的解决方案,并发送一个大的响应,你可以尝试添加某种类型的变量告诉android要写哪个图像。那么你应该能够将每个图像作为一个单独的写入。

+0

我只是关闭outputSteam。我保持套接字连接活着。这是一个问题吗? –

+0

我不确定,但我认为PC代码正在尝试读取套接字中的所有内容,并且只能获得一次写入。如果你保持socket打开并从android写入,然后从PC读取,然后重复它应该工作。你尝试过那样的事吗? – BlargleMonster

+1

@NguyenMinhBinh你并没有保持套接字的连接。关闭输入或输出流会关闭另一个流和套接字,然后关闭连接。 – EJP