C#如何发送图片信息给JAVA程序接收 我的客户端是用C#写的,C#用SOCKET发送如何发送图片数据到一个JAVA的程序来接收图片信息呢,我的C#序列化后用JAVA不知道能不能反序列化,不知道哪位大侠有做过这方面的程序!另外是将图片序列化成一个字符串存到XML里面,JAVA收到信息之后解析XML获得这个序列化之后的图片字符串再反序列化,如果两端都是C#问题不大,但是不知道JAVA怎么做! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 另外我用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怎么反序列化 直接使用图片的二进制流呢?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是通用的吧 好久没摸过java代码了,呵呵。你可在.net中使用HttpWebRequest和HttpWebResponse来发送消息和接收消息。思想是通过一个向java的一个jsp页面传递参数的形式把你转化过的二进制流传过去。如果要加密也行,java和.net有一个公共的加密算法,具体我忘记了,你自己看看吧。然后在java中获取这个二进制图片流,进行处理。OK.问题解决。我以前做过类似的,呵呵,希望对你有帮助。 因为要经过网闸,所以必须用SOCKET方式,因为网闸验证必须是发送SOCKET验证包,然后建立的这条连接才可以用,因此用一个JSP页面的方法行不通!另外用byte[]的方式我也想过,但是如果完全就是byte[]数据传过去的话,那么包头和包尾就不容易鉴别了,比如粘包的情况就不好判断了不知道各位对于直接传byte[]数据辨别传输结束的问题是怎么处理的呢!! 觉得这种使用tcp/ip通讯最保险。 楼上说了很多,你可以试试TCP/IP协议来,看看WEBSERVICE吧,个人觉得可以用那个来跨平台 非常感谢楼上所有朋友的回复,其实我现在就是用的SOCKET通讯,Tcp协议,包头+包体的方式,这种方式对于普通的数据自然是没有任何问题的,但是现在主要的问题是怎么传图片,我将图片转换成一个字符串放XML里面,那么在JAVA里面如何才能将这个字符串转换成图片 如何用这种方式传图片的问题,另外最主要是JAVA怎么解析,如果都是用C#的话自然是没有任何问题的 任何文件都是byte[]即使用xml传也没什么问题,比如图片都转成base64放xml里,java把xml的内容decode成byte[]再恢复成图片 谁都知道SOCKET发送的是byte[],不过这不是问题的关键,如果做过的就不会专门关注这种简单的地方来说了,这不是我要想解决的问题,不过也还是非常感谢各位,呵呵! 楼主,我觉得吧,最主要是问题是你把帖子发错地方了。既然你可以把图片转化成序列化的xml串传到java那边。现在的问题就得找java版块的人来帮着解决了。你放到这一堆做c#的人群中,奈何大家想帮,也使不上劲呀。虽说我们中有些人是对java有些了解,甚至是做过。可是大家主要精力还是放在c#中的。你问问做java的朋友们吧。 使用的Encoding一样就可以 说的很有道理,把这个帖子放到Java板块看看!!! byte[] 直接send过去至于文件头尾,你还是不理解tcp连接你可以试着做做,不管这个问题 按你的情况 最好是使用base64编码后传输如:MemoryStream ms = new ...string result = Convert.ConvertToBase64(ms.ToArray());send(result); 问题是问java是否实现类似C#的反序列化,这个...不懂java哪怕是C#的序列化后的字节数据,用VC能否反序列化,我也是不知道的 可以用中间件,我们目前用的Tibico RV, Java和.net通过Tibco RV通信. 请教一个问题类型转换 C#如何抓取别人网站数据别替换为我所用--谢谢高手 问个非常简单的问题!两个工程间调用 工作流中传递的只能是文件吗? 模式求教 delrec.Attributes.Add("onclick", "return confirm('Are you sure to delete this record?');")应该怎么用? 请问使用Remoting时,如何在一个程序里面同时实现服务器端和客户端? 急 出一道解析几何的题目 如何用这种格式算出一个月前的日期? 请教高手 C# 回调函数 线程问题 关于dataGridView的颜色问题!
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怎么反序列化
{
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是通用的吧
思想是通过一个向java的一个jsp页面传递参数的形式把你转化过的二进制流传过去。如果要加密也行,java和.net有一个公共的加密算法,具体我忘记了,你自己看看吧。
然后在java中获取这个二进制图片流,进行处理。OK.问题解决。
我以前做过类似的,呵呵,希望对你有帮助。
另外用byte[]的方式我也想过,但是如果完全就是byte[]数据传过去的话,那么包头和包尾就不容易鉴别了,比如粘包的情况就不好判断了不知道各位对于直接传byte[]数据辨别传输结束的问题是怎么处理的呢!!
其实我现在就是用的SOCKET通讯,Tcp协议,包头+包体的方式,这种方式对于普通的数据自然是没有任何问题的,但是现在主要的问题是怎么传图片,我将图片转换成一个字符串放XML里面,那么在JAVA里面如何才能将这个字符串转换成图片
任何文件都是byte[]
即使用xml传也没什么问题,比如图片都转成base64放xml里,java把xml的内容decode成byte[]再恢复成图片
现在的问题就得找java版块的人来帮着解决了。你放到这一堆做c#的人群中,奈何大家想帮,也使不上劲呀。虽说我们中有些人是对java有些了解,甚至是做过。可是大家主要精力还是放在c#中的。你问问做java的朋友们吧。
至于文件头尾,你还是不理解tcp连接
你可以试着做做,不管这个问题
如:MemoryStream ms = new ...
string result = Convert.ConvertToBase64(ms.ToArray());
send(result);
哪怕是C#的序列化后的字节数据,用VC能否反序列化,我也是不知道的