我的客户端是用C#写的,C#用SOCKET发送如何发送图片数据到一个JAVA的程序来接收图片信息呢,我的C#序列化后用JAVA不知道能不能反序列化,不知道哪位大侠有做过这方面的程序!另外是将图片序列化成一个字符串存到XML里面,JAVA收到信息之后解析XML获得这个序列化之后的图片字符串再反序列化,如果两端都是C#问题不大,但是不知道JAVA怎么做!

解决方案 »

  1.   

    另外我用C#序列化的代码在我博客里面也有Bitmap bitMap = new Bitmap(filename);
                MemoryStream ms = new MemoryStream();
                bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);            StringWriter sw = new StringWriter();
                XmlTextWriter xw = new XmlTextWriter(sw);
                xw.Formatting = Formatting.Indented;
                XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
                ser.Serialize(xw, ms.GetBuffer());
                string xmlString = sw.GetStringBuilder().ToString();
                xw.Close();
                sw.Close();
                ms.Close();            XmlDocument doc = new XmlDocument();
                doc.LoadXml(xmlString);
                if (doc != null && doc.ChildNodes.Count > 1 && doc.ChildNodes[1] != null)
                {
                    XmlNode node = doc.ChildNodes[1];
                    photoString = node.InnerText;
                }
    不知道photoString 用JAVA怎么反序列化
      

  2.   

    直接使用图片的二进制流呢?public Byte[] getphoto(string photopath)
    {
    string str = photopath;
    FileStream file = new FileStream(str, FileMode.Open, FileAccess.Read);
    Byte[] bytBLOBData = new Byte[file.Length];
    file.Read(bytBLOBData, 0, bytBLOBData.Length);
    file.Close();
    return bytBLOBData;
    }//这是定义函数.. 二进制流C#和java是通用的吧
      

  3.   

    好久没摸过java代码了,呵呵。你可在.net中使用HttpWebRequest和HttpWebResponse来发送消息和接收消息。
    思想是通过一个向java的一个jsp页面传递参数的形式把你转化过的二进制流传过去。如果要加密也行,java和.net有一个公共的加密算法,具体我忘记了,你自己看看吧。
    然后在java中获取这个二进制图片流,进行处理。OK.问题解决。
    我以前做过类似的,呵呵,希望对你有帮助。
      

  4.   

    因为要经过网闸,所以必须用SOCKET方式,因为网闸验证必须是发送SOCKET验证包,然后建立的这条连接才可以用,因此用一个JSP页面的方法行不通!
    另外用byte[]的方式我也想过,但是如果完全就是byte[]数据传过去的话,那么包头和包尾就不容易鉴别了,比如粘包的情况就不好判断了不知道各位对于直接传byte[]数据辨别传输结束的问题是怎么处理的呢!!
      

  5.   

    觉得这种使用tcp/ip通讯最保险。
      

  6.   

    楼上说了很多,你可以试试TCP/IP协议来,看看WEBSERVICE吧,个人觉得可以用那个来跨平台
      

  7.   

    非常感谢楼上所有朋友的回复,
    其实我现在就是用的SOCKET通讯,Tcp协议,包头+包体的方式,这种方式对于普通的数据自然是没有任何问题的,但是现在主要的问题是怎么传图片,我将图片转换成一个字符串放XML里面,那么在JAVA里面如何才能将这个字符串转换成图片
      

  8.   

    如何用这种方式传图片的问题,另外最主要是JAVA怎么解析,如果都是用C#的话自然是没有任何问题的
      

  9.   


    任何文件都是byte[]
    即使用xml传也没什么问题,比如图片都转成base64放xml里,java把xml的内容decode成byte[]再恢复成图片
      

  10.   

    谁都知道SOCKET发送的是byte[],不过这不是问题的关键,如果做过的就不会专门关注这种简单的地方来说了,这不是我要想解决的问题,不过也还是非常感谢各位,呵呵!
      

  11.   

    楼主,我觉得吧,最主要是问题是你把帖子发错地方了。既然你可以把图片转化成序列化的xml串传到java那边。
    现在的问题就得找java版块的人来帮着解决了。你放到这一堆做c#的人群中,奈何大家想帮,也使不上劲呀。虽说我们中有些人是对java有些了解,甚至是做过。可是大家主要精力还是放在c#中的。你问问做java的朋友们吧。
      

  12.   

    使用的Encoding一样就可以
      

  13.   

    说的很有道理,把这个帖子放到Java板块看看!!!
      

  14.   

    byte[] 直接send过去
    至于文件头尾,你还是不理解tcp连接
    你可以试着做做,不管这个问题
      

  15.   

    按你的情况 最好是使用base64编码后传输
    如:MemoryStream ms = new ...
    string result = Convert.ConvertToBase64(ms.ToArray());
    send(result);
      

  16.   

    问题是问java是否实现类似C#的反序列化,这个...不懂java
    哪怕是C#的序列化后的字节数据,用VC能否反序列化,我也是不知道的
      

  17.   

    可以用中间件,我们目前用的Tibico RV, Java和.net通过Tibco RV通信.