Get-запрос. Ошибка "Сервер нарушил протокол. Section=ResponseStatusLine

348
31 марта 2017, 21:47

Доброе время суток! При вызове Get метода, catch(Exception ex) выводит ошибку "Сервер нарушил протокол. Section=ResponseStatusLine.

код на клиенте Метод get-запроса:

  public String URL = "http://192.168.16.254:8080/blinkSs";
    string r = "";
    private string GET(string sUrl, string Data)
    {
        System.Net.WebRequest req = System.Net.WebRequest.Create(sUrl + "?" + Data);
        System.Net.WebResponse resp = req.GetResponse();
        System.IO.Stream stream = resp.GetResponseStream();
        System.IO.StreamReader sr = new System.IO.StreamReader(stream);
        string Out = sr.ReadToEnd();
        sr.Close();
        return Out;
    }

Вызываю метод GET вот так:

if (e.KeyCode == Keys.Up)
            {
                try
                {
                    r = "oske";
                    String a=GET(URL, r);
                    MessageBox.Show(a);
                }
                catch(Exception ex) {
                    MessageBox.Show("error" + " " + ex.Message);
                }
            }

код на сервере:

void setup() {     
  Serial.begin(115200);  
  pinMode(13, OUTPUT); //Rele 1
  //pinMode(12, OUTPUT);  //Rele 2
}
int f = 0;
String com_get = "";//
void loop() {
  boolean has_request = false;
  String in = "";
  if (Serial.available()) {
    in = "";
    while (true) {  // should add time out here
      while (Serial.available() == false) {}
      in += (char)(Serial.read());//тут хттп запрос, урл адресс
      if (in.endsWith("\r\n\r\n")) {//если первая строка (string) завершается символом, содержащимся в строке string2
        has_request = true;  break;
      }
    }   
  }
  if (has_request) {
    int i1 = in.indexOf("GET /blinkSs?"), i2;//13 символов
    if (i1 != -1) {
      i2 = in.indexOf(" ", i1+13);//кол. символов с 13ого
      f = in.substring(i1+13, i2).toInt();//запрос
      com_get=in.substring(i1+13, i2);
    }      

    //Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close");
     //String sr = "<!DOCTYPE HTML>";
     //Serial.println(sr);
    // Serial.println("<html>");
     //Serial.println("<head>");
     //Serial.println("</head>");
     //Serial.println("<body>");
    if (com_get=="oske") {f=1; Serial.println("Comando 1. oske"); } //↑
    if (com_get=="aska") {f=2; Serial.println("Comando 2. aska"); }//↓
    if (com_get=="kren_unga") {f=3; Serial.println("Comando 3. kren_unga"); }// /
    if (com_get=="kren_sulga") {f=1; Serial.println("Comando 1. kren_sulga"); }// \
   //Serial.println("</body>");
   //Serial.println("</html>\n");
    has_request = false;
  }
switch (f){
  case 1:
   digitalWrite(13, HIGH);
   break;
  case 2:
   digitalWrite(13, LOW);
   break;  
   f=0;
   Serial.end();
}  
}
Answer 1

Попробуй добавить:

    System.Net.WebRequest req = System.Net.WebRequest.Create(sUrl + "?" + Data);
    req.KeepAlive = false; // эту строку
    System.Net.WebResponse resp = req.GetResponse();
READ ALSO
Методы из Dictionary

Методы из Dictionary

Объясните, пожалуйста, как реализовать такой словарь?

360
как обратиться к элементу словаря по ключу?

как обратиться к элементу словаря по ключу?

как обратиться к элементу словаря по ключу, если ключ -

288
async void или как превратить Action в Func&lt;Task&gt;

async void или как превратить Action в Func<Task>

Есть некий класс, который принимает в конструктор Action<object>Но мне потребовалось передать туда асинхронный метод (то есть Func<object, Task>)

205