-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHTTPClient.cs
More file actions
139 lines (121 loc) · 4.24 KB
/
HTTPClient.cs
File metadata and controls
139 lines (121 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using UnityEngine;
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Collections;
public class HTTPClient : MonoBehaviour {
public delegate void ObtainData(string JsonString);
public static event ObtainData OnObtainData;
private enum Method
{ POST, GET };
private const string Enctype = "application/x-www.form-urlencoded";
private static string JSON;
public static string serverURL
{
private get;
set;
}
/// <summary>
/// HTTP通信
/// </summary>
/// <param name="JSONstring"></param>
/// <returns></returns>
public static bool HttpConnect(string JSONstring)
{
JSON = JSONstring;
HttpWebRequest request = null;
HttpWebResponse response = null;
int lastTime = 0;
//网络请求线程
Thread requestThread = new Thread(delegate()
{
WaitForConnection(out request);
});
requestThread.Start();
//通过持续时间判断网络是否异常
lastTime = System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000;
while(requestThread .IsAlive)
{
if(System.DateTime.Now.Millisecond+System.DateTime.Now.Second*1000-lastTime<0)
{
lastTime = System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000;
}
else if(System.DateTime.Now.Millisecond+System.DateTime.Now.Second*1000-lastTime>2000)
{
Debug.Log("Request Lost!");
requestThread.Abort();
return false;
}
}
//网络回应线程
Thread responseThread = new Thread(delegate()
{
WaitForResponse(request, response);
});
responseThread.Start();
//通过持续时间判断网络是否异常
lastTime = System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000 - lastTime;
while(responseThread .IsAlive )
{
if (System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000 - lastTime < 0)
{
lastTime = System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000;
}
else if (System.DateTime.Now.Millisecond + System.DateTime.Now.Second * 1000 - lastTime > 2000)
{
Debug.Log("Request Lost!");
requestThread.Abort();
return false;
}
}
return true;
}
/// <summary>
/// 向网络发出请求
/// </summary>
/// <param name="request">需要转换字符流</param>
private static void WaitForConnection(out HttpWebRequest request)
{
request = (HttpWebRequest)HttpWebRequest.Create(serverURL);
byte[] byteArray = Encoding.UTF8.GetBytes(JSON);
request.Method = Method.POST.ToString();
request.ContentType = Enctype;
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
}
/// <summary>
/// 接收网络的响应
/// </summary>
/// <param name="request"></param>
/// <param name="response">可能产生异常</param>
private static void WaitForResponse(HttpWebRequest request,HttpWebResponse response)
{
using(response=(HttpWebResponse )request .GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
#region 响应成功
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
string responseBody = reader.ReadToEnd();
try
{
OnObtainData(responseBody);
}
catch (Exception ex)
{
print("网络出现异常,异常信息:" + ex.Message);
}
}
}
#endregion
}
}
}
}