将byte []从Android应用程序传递到C#控制台应用程序?

时间:2014-04-08 13:57:04

标签: c# android wpf sockets byte

我正在构建一个C#,WPF和Android应用程序,主要用于培训,但不管怎样,我遇到的问题如下:

当我执行以下代码WPF应用程序时,它会将所需文件从磁盘保存到桌面,但是当我尝试从Android应用程序执行相同操作时出现问题,我确实连接到控制台应用程序,但是byte[]显然格式不一样,也许我会遗漏某些内容,或者说我出错了。


将图像转换为字节数组函数:C#

 private static byte[] ImageToByteArraybyMemoryStream(Image image) {
        MemoryStream ms = new MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms.ToArray();
    }

将图像保存到磁盘方法C#

public static void ByteArrayToImageFilebyMemoryStream(byte[] imageByte) {
   try {

        MemoryStream ms = new MemoryStream(imageByte);
        Image image = Image.FromStream(ms);
        image.Save(@"C:\Users\jycr753\Desktop\imageTest1.png");
   }
}

转换为byte[]并从 Android 应用程序发送。

 ByteArrayOutputStream stream = new ByteArrayOutputStream();
 bitmapImage.compress(Bitmap.CompressFormat.PNG, 70, stream);
 byteArray = stream.toByteArray();
 File fl = new File( imagePath);
 FileInputStream fi = new FileInputStream( fl );
 BufferedInputStream bi = new BufferedInputStream( fi );
 bi.read( byteArray, 0, byteArray.length );
 OutputStream outs = sock.getOutputStream();
 outs.write( byteArray, 0, byteArray.length );
 outs.flush();

来自控制台应用程序的图像 enter image description here


保存文件方法屏幕截图中的

调试程序

enter image description here

Manifest Permitions

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

字节代码 如果C#应用程序期望ASCII编码,是否有任何问题?


任何指示我指向正确方向的帮助都会很棒,如果需要添加更多代码,请问:)

感谢社区..

1 个答案:

答案 0 :(得分:1)

从代码中看不到C#打开套接字流的另一端到底是如何读取的。

阅读套接字流的常见问题是您不知道何时收到所有数据。

网络层可能会多次发出一些数据信号。如果没有一些协议,包括数据包已启动数据包已结束的含义标记,则无法确定整个PNG何时到达,除非您使用某些全有或全无协议 - 例如HTTP GET

双方也必须同意确切的二进制协议,例如: little or big endian

需要更多数据才能提供更好的答案