2016-07-06 3 views
0

안녕하세요 아래 내가 좋아하는 내 서버에서 MSG를받을 수 있습니다 지금 내 코드HttpWebResponse가 서버에서 메시지를 기다리는 데 yield/coroutine을 필요로합니까?

public static string PUT (string url, string jsonStr){ 
    string msg = ""; 

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.Method = "PUT"; 
    ServicePointManager.Expect100Continue = false; 

    using (StreamWriter sw = new StreamWriter(httpWebRequest.GetRequestStream())){ 
     sw.Write(jsonStr); 
     sw.Flush(); 
     sw.Close(); 
    } 

    try{ 
     HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse; 
     using (StreamReader streamReader = new StreamReader(response.GetResponseStream())) 
     { 
      msg = streamReader.ReadToEnd(); 
     } 
    }catch(WebException ex){ 
     msg = ex.Message; 
    } 

    return msg; 
} 

입니다, 내 서버에 JSON 문자열을 보내도록 "PUT"요청을 구현하기 위해 노력하고 있습니다 "성공!" 꽤 짧습니다. 하지만이 방법을 coroutine으로 작성하고 "yield return response"또는 "yield return streamReader.EndofStream()"과 같이 모든 메시지가 서버에서 수신 된 후에 응답을 읽는지 확인해야하는지 궁금합니다.

고유 한 웹 요청 방법 인 Unity3D를 사용하고 있습니다. "UnityWebRequest"가 필요하므로 요청이 완료 될 때까지 "yield return unityWebRequest.send()"가 필요합니다. 그래서 내가 HttpWebRequest에 필요할 수도 있다고 생각하는 이유입니다.

+0

당신은 HttpWebRe * 클래스를 사용하면 안됩니다. WWW 클래스 –

+0

@cFrozenDeath를 사용해야합니다. UnityWebRequest와 WWW를 모두 시도했지만 작동하지 않습니다 (여전히 궁금합니다). 그래서 C#의 webRequest를 대신 사용합니다. – milanow

+0

WWW 문제는 GET 및 POST 요청 만 받아 들일 수 있다는 것일 수도 있습니다. –

답변

3

서버에서 HttpWebResponse가 yield/coroutine을 기다려야합니까?

번호

하지만 " streamReader.EndofStream() 항복 반환"보장하는이 방법은 코 루틴으로 작성해야하는지 궁금 "항복 복귀 응답"또는 같은 을 모든 메시지가 서버에서 가져온 후 응답을 읽습니다.

coroutine/yiled를 WWWUnityWebRequest과 함께 사용할 수 있습니다. UnityWebRequest here에 대해 자세히 알아볼 수 있습니다.

HttpWebResponse의 경우 Thread에서 사용하거나 비동기 버전을 사용해야합니다. Here이 그 예입니다. 이렇게하지 않으면 대개 큰 데이터를받을 때 게임이 거의 멈추는 것을 기대하십시오.

+0

나는 이것을 고려하고있다. 그것은 내가 원하는 것 같다. [here] (http://stackoverflow.com/a/12606963/3577115) – milanow

+0

@milanow 좋습니다. 당신에게 적합한 것을 사용하십시오.이 질문에 답하는 한'yield coroutine'을'HttpWebResponse'와 함께 사용할 수 없다. – Programmer