0 0

关于unity3d与java客户端通信传图片的问题10

最近项目中用到了unity,需要在unity中截图,并通过webservices将截图信息传递到java服务器端上。但是在java服务器端上出现了问题,我查了资料不知道如何解决,求指点!!

 

这个是我在unity中写的截取图像的代码,图片信息需要通过WWWFORM上传到java服务器端上

public byte[] shot()
    {
        int width = Screen.width;
        int height = Screen.height;
        Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
        byte[] bytes = tex.EncodeToPNG();
        return bytes;
    }

    public void getScreenshotByUrl(string data) {
        StartCoroutine(GetScreenshot(data));
    }

    public IEnumerator GetScreenshot(string data)
    {

        byte[] result = shot();
        IDictionary jsonDic = (IDictionary)Json.Deserialize(data);
        string normalUrl = (string)jsonDic["normalUrl"];        
       
        string time = string.Format("{0:yyyyMMddHHmmss}", DateTime.Now);
       
        //创建一个Web表单
	    WWWForm form = new WWWForm();
	    form.AddField("arg0", time);
        form.AddBinaryData("arg1", result);


        WWW www = new WWW(normalUrl.ToString(), form);
        yield return www;

        if (www.error != null)
            print(www.error);
        else
            print("Finished Uploading Screenshot");

    }

 这个是在JAVA中的服务器端的webservices代码

	
	@Override
	public int insertPic(String name,byte[] content) throws Exception {
		
		System.out.println(content);
		System.out.println(name);
		return (Integer) null;
	}

 这个是后台报的错误

2012-10-17 10:13:05 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
警告: Interceptor for {http://web.webservice.firems.suresource.com/}LocationWebserviceImplService has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
	at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:237)
	at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:60)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123)
	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:207)
	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)
	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154)
	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:128)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:185)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:108)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1]
Message: Content is not allowed in prolog.
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594)
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1235)
	at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:138)
	... 27 more
2012年10月17日 10:15

5个答案 按时间排序 按投票排序

0 0

采纳的答案

C# 有读取文件流 的方法吧。只需要u3d脚步里面获取默认图片的位置,那么随便百度一个c# 上传文件。模拟post提交http请求。。。那么这样请求java服务器上传图片的方法。。
c# 只是模拟一次http请求传参而已

2012年10月17日 11:54
0 0

我用Unity4.5,form.AddField 和 form.AddBinaryData同时使用,从servlet中获取参数全都是null,只用AddField可以正常获取,使用AddBinaryData为null
请指教!

2014年6月07日 19:07
0 0

你不该用webservices来接收上传上来的文件。 你直接用个servlet接收就行了。那个wwwFrom你可以认为是以表单的方式上传文件。

 WWWForm:  Helper class to generate form data to post to [color=red]web servers [/color] 
注意是 web servers 。

2012年10月17日 14:23
0 0

如果想要改变默认的图片位置:
送你个脚本:
private var www:WWW; 
private var image:Texture; 
private var path:String;
function Start () { 
   if(Application.platform==RuntimePlatform.Android){ 
      path=Application.persistentDataPath; 
   }else if(Application.platform==RuntimePlatform.WindowsPlayer){ 
      path=Application.dataPath; 
   }else if(Application.platform==RuntimePlatform.WindowsEditor){ 
      path=Application.dataPath; 
      path=path.Replace("/Assets",null); 
    }   
   www=new WWW("file://"+path+"/Screenshot.png"); 
   yield www; 
   image=www.texture; 

2012年10月17日 12:23
0 0

我看到demo
http://www.lwhbj.com/unity3d/Documentation/ScriptReference/WWWForm.html

2012年10月17日 11:56

相关推荐

    Unity3D 与 Java 基于 Protobuf 通信实现(客户端)

    本教程将深入探讨如何利用Protocol Buffers(Protobuf)在Unity3D客户端与Java服务器之间实现通信。Protocol Buffers是一种高效的数据序列化协议,由Google开发,它能够将结构化数据转化为二进制格式,便于网络传输...

    unity3d 游戏客户端源码(v1.0.3)

    unity3d 游戏客户端源码,主要的功能有: 1. 实现C#与Java Web服务的通信 2. 使用Netty实现Socket异步长连接游戏服务器 3. 解决了网络通信的断包粘包问题 4. 实现了消息的序列化与反序列化 5. 实现客户端连接认证 6....

    Unity-and-Java-communication.rar_unity_unity socket_unity3d_unit

    在Unity3D与Java之间建立Socket连接,可以实现游戏客户端与服务器之间的实时通信,例如玩家状态同步、游戏数据交换等。 Unity3D部分,开发者需要使用Unity的C#脚本来创建Socket实例,初始化连接,然后发送和接收...

    java服务器 java机器人 unity3D客户端.zip

    在本项目中,我们主要关注的是“java服务器”与“java机器人”,以及“Unity3D客户端”的集成开发。这些技术都是构建现代游戏或分布式应用的关键组成部分。以下是对这些知识点的详细说明: 1. **Java服务器**:Java...

    java服务器 java机器人 unity3D客户端.rar

    Netty Client/Server 实现网络层的客户端与服务器通信 Spring Shell 用于开发命令窗口,模拟客户端操作 Arthas 实现不重启服务器热更新代码 Logback 日志框架 MongoDB 数据库 lombok 用于自动生成类的Getter和Setter...

    AndroidStudio与Unity3D进行Socket通讯

    在现代的跨平台游戏开发和应用交互中,Android Studio和Unity3D的集成通信变得越来越重要。本主题将深入探讨如何使用Socket编程在Android Studio和Unity3D之间实现数据交换,以便于创建实时互动的游戏或者应用程序。...

    Unity3D((4.x5.x)版本游戏源码(4-5.x)(天神传)RPG(客户端+服务器)

    Unity3D 提供了 UNET 模块来处理客户端与服务器之间的数据传输,包括同步玩家状态、发送指令等。 ### 五、学习与发展 #### 1. 学习路径 对于想要学习 Unity3D 游戏开发的人来说,《天神传》这样的完整项目是非常好...

    基于Netty,Socket通信的斗地主游戏服务,前台使用Unity3d&C#,后台Java实现.zip

    在此项目中,Socket用于建立Unity3d客户端与Java服务器之间的通信链路,实现游戏状态的实时同步。 3. **Unity3D**: Unity3D是一款跨平台的游戏开发引擎,广泛应用于2D、3D游戏的制作。在这个项目中,Unity3D被用作...

    心悦游戏开发框架包括Unity3d客户端通信,服务器架构,可以直接用于卡牌游戏,休闲类游戏的开发 本框架实现了客户端与服务端的一些基本功能,让游戏开发者可以尽快的进行业务开发,减少项目的开发周期

    心悦游戏开发框架包括Unity3d客户端通信,服务器架构,可以直接用于卡牌游戏,休闲类游戏的开发。本框架实现了客户端与服务端的一些基本功能,让游戏开发者可以尽快的进行业务开发,减少项目的开发周期。版本由三...

    unity3d 战斗卡牌《变身吧主公》客户端+服务器源码.zip

    总的来说,《变身吧主公》的客户端与服务器源码为开发者提供了一个深入学习游戏开发的实例,包括Unity3D的使用、服务器架构设计和网络通信机制。通过对这些知识点的理解和实践,开发者可以提升自己的游戏开发技能,...

    Unity与Netty通信Demo

    Unity与Netty通信Demo是一个示例项目,展示了如何在Unity游戏引擎中利用网络库Netty进行数据通信。这个Demo提供了可直接应用于实际项目的代码,帮助开发者理解如何在Unity的C#环境中与Java后端服务器通过Netty进行...

    C#基于PureMVC框架的Unity3D网络对战2D射击游戏客户端源码.zip

    《C#与Unity3D结合PureMVC框架构建2D射击游戏客户端》 在游戏开发领域,Unity3D因其强大的3D图形处理能力和跨平台特性,成为许多开发者首选的引擎。而C#作为Unity3D的主要编程语言,以其简洁、高效、面向对象的特性...

    基于Android平台的Unity3D网络功能的开发.pdf

    2. **Android客户端应用开发**:在Android平台上开发游戏意味着需要理解Android SDK,掌握Java编程语言,以及如何将Unity3D游戏导出到Android平台。 3. **网络功能开发**:Unity3D的网络功能允许开发者实现多人在线...

    Unity与Netty进行ProtoBuf通信__

    4. **设置Unity与Netty通信**:在Unity客户端,你需要创建一个WebSocket或TCP连接到运行Netty的服务器。发送数据时,先序列化对象,然后通过连接发送序列化后的字节数组。在服务器端,Netty将接收到这些字节,反序列...

    基于 Netty 开发的 Java 游戏服务端框架,目前提供 CocosCreator 和 Unity 的客户端SDK。.zip

    综上所述,这个基于 Netty 的 Java 游戏服务端框架结合了 CocosCreator 和 Unity 的 SDK,为游戏开发者提供了一套完整的解决方案,覆盖了服务端开发、客户端与服务端的通信以及游戏状态同步等多个环节,大大简化了...

    SFS2X_Basic_Examples包含unity3d和flash的源代码

    对于Unity3D的示例,开发者可以期待看到如何设置SmartFoxServer 2X的客户端库,如何建立连接,如何发送和接收数据,以及如何处理多人游戏中的事件。这通常涉及C#脚本,可能还有Unity的网络接口,如NetworkManager或...

    基于Java的心悦游戏开发框架设计源码

    该项目是一款基于Java的心悦游戏开发框架,包含176个文件,涵盖138个Java源代码...该框架支持Unity3d客户端通信,具备完善的服务器架构,适用于卡牌游戏和休闲类游戏的快速开发,有效减少项目开发周期,提高开发效率。

    socket通信

    在本文中,我们将深入探讨Socket通信的基本概念、工作原理以及如何利用Java和Unity3D来构建一个简单的聊天应用。 一、Socket通信基础 1. Socket定义:Socket是操作系统提供的网络编程接口,它为应用程序提供了一种...

    UnitySocketProtobuf3Demo-master.zip

    在本项目中,Unity3D主要负责客户端游戏逻辑的实现,通过网络通信接口与服务器进行数据交换。 2. **Go语言(Golang)**:Go语言是Google推出的一种静态类型、垃圾回收的编程语言,以其简洁的语法、高效的性能和良好...

Global site tag (gtag.js) - Google Analytics