[unity3d]unity跟.net进行http通信

原创
2013/12/04 00:05
阅读数 3.9K

谈谈今天的学习感受,今天收获最大的就是解决了u3d向.net提交表单,然后.net服务器将接受过来的表单数据保存到sqlserver数据库中。unity3d中wwwform默认的是post提交的。

http 提交数据原理 

http 协议通过 url来获取和提交数据 。提交数据的方式 有两种,一种是get方法,一种是post方法。get一般用于告诉服务器把满足参数的数据发送给回来。

例如:get 的html代码如下:

[html]  view plain copy
  1. <form action="search.php" method ="GET">  
  2.     <username:<inputtypeinputtype="text"name="user"/><br>  
  3.     <password:<inputtypeinputtype="password "name="pwd"/><br>  
  4.      <input type="submit"value="login"/>  
  5. </form >  

post一般是将数据发送给服务器,服务器将这些数据进行处理,比如说存储到数据库。

例如:post的html 代码如下:

[html]  view plain copy
  1. <form action="login.php" method ="POST" >  
  2.     <username:<inputtypeinputtype="text"name="user"/><br>  
  3.     <password:<inputtypeinputtype="password "name="pwd"/><br>  
  4.      <input type="submit"value="login"/>  
  5. </form >  

     其实区别就是提交的方式不一样,点击login按钮后,浏览器地址栏里分别显示如下:

       get方法url为:http://127.0.0.1/serach.php?user=hortor&pwd=123

       post方法url为:http://127.0.0.1

客户端发送表代码:

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class test : MonoBehaviour {  
  5.   
  6.     private string url = "http://192.168.1.7/plusFile/Handler.ashx";  
  7.     private string urlname;  
  8.     void Start () {  
  9.         urlname = "丁小未";  
  10.           
  11.     }  
  12.       
  13.     void OnGUI()  
  14.     {  
  15.         GUILayout.Label("姓名:");  
  16.         urlname = GUILayout.TextField(urlname);  
  17.         if(GUILayout.Button("确认提交"))  
  18.         {  
  19.             StartCoroutine(myUpdate());   
  20.         }  
  21.     }  
  22.       
  23.     IEnumerator myUpdate()  
  24.     {  
  25.         WWWForm form = new WWWForm();  
  26.         form.AddField("url",urlname);  
  27.         WWW w = new WWW(url,form);  
  28.         yield return w;  
  29.         print(w.data);  
  30.         if(w.error!=null)  
  31.         {  
  32.             print("错误:"+w.error);  
  33.         }  
  34.         else  
  35.         {  
  36.             print("OK");  
  37.             print(w.text); //服务器端返回的数据  
  38.             print("长度:"+w.text.Length.ToString());  
  39.         }  
  40.     }  
  41. }  

效果图:


服务器端接受代码:

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <%@ WebHandler Language="C#" Class="Handler" %>  
  2.   
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Linq;  
  6. using System.Web;  
  7. using System.Web.UI;  
  8. using System.Web.UI.WebControls;  
  9. using System.Data.SqlClient;  
  10. using System.Data;  
  11.   
  12. public class Handler : IHttpHandler {  
  13.       
  14.     public void ProcessRequest (HttpContext context) {  
  15.         context.Response.ContentType = "text/plain";  
  16.           
  17.         string name = context.Request.Form["url"];  
  18.         //string name = context.Request.QueryString["url"];  
  19.         if (name != null)  
  20.         {  
  21.             context.Response.Write("我接收到了:"+name);  
  22.             //context.Response.Write("<font color= 'red'>hello</font>");  
  23.             Test1 t = new Test1();  
  24.             t.conn(name);     
  25.         }  
  26.         else  
  27.         {  
  28.             context.Response.Write("error");  
  29.         }  
  30.     }  
  31.    
  32.     public bool IsReusable {  
  33.         get {  
  34.             return false;  
  35.         }  
  36.     }  
  37.   
  38. }  
  39.   
  40.   
  41. public class Test1  
  42. {  
  43.     SqlConnection dbConnection;  
  44.     private string sqlInsert;  
  45.     //private string name;  
  46.   
  47.     public Test1()  
  48.     {  
  49.           
  50.     }  
  51.   
  52.     public void conn(string name)  
  53.     {  
  54.         if (name != null)  
  55.         {  
  56.             sqlInsert = "INSERT INTO source(url) VALUES(" + "'"+name+"'" + ")";  
  57.             openSqlConnection();//打开数据库  
  58.             doQuery(sqlInsert);  
  59.         }  
  60.     }  
  61.   
  62.     public void openSqlConnection()  
  63.     {  
  64.         dbConnection = new SqlConnection("server=.;database=Student;user id=sa;password=123456");  
  65.         dbConnection.Open();  
  66.     }  
  67.   
  68.     public void closeSqlConnection()  
  69.     {  
  70.         dbConnection.Close();  
  71.         dbConnection = null;  
  72.     }  
  73.   
  74.     public void doQuery(string strCommand)  
  75.     {  
  76.         SqlCommand dbCommand = dbConnection.CreateCommand();  
  77.         dbCommand.CommandText = strCommand;  
  78.         int i = dbCommand.ExecuteNonQuery();  
  79.         dbCommand.Dispose();  
  80.         dbCommand = null;  
  81.         if (i > 0)  
  82.         {  
  83.             //Response.Write("插入成功");  
  84.         }  
  85.     }  
  86. }  

服务器端效果图:




技术讨论群:858550    欢迎前来讨论技术问题。
展开阅读全文
打赏
1
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部