HTTP Request schicken, aber keine Antwort erhalten

MD1978

Erfahrenes Mitglied
Hallo,
zuerst einmal danke für die vielen hilfreichen Tips. Hat mir oft weitergeholfen.
Leider habe ich noch eine Problem:
Ich habe eine Anwendung, die an eine andere Anwendung Daten über HTTP schicken soll. Ich will aber keine Antwort zurück erhalten. Mein Code bisher:

publicvoid sendHTTP (String serverName, int serverPort, String data) {
try {

string postData = "data=" + data;
ASCIIEncoding encoding =
new ASCIIEncoding();

byte[] pdbytes = encoding.GetBytes(postData);

HttpWebRequest hwr = (HttpWebRequest) WebRequest.Create("http://" + serverName + ":" + serverPort);

hwr.Method = "POST";

hwr.ContentLength = postData.Length;

hwr.ContentType = "application/x-www-form-urlencoded";


Wie schicke ich das nun, ohne eine Antwort zu erhalten (also nicht mit
hwr.GetRequestStream()) und wie schliesse ich dann die HTTP Verbindung?

Gruss,

MD
 
Zuletzt bearbeitet:
Hallo,

ich habe mich etwas falsch ausgedrückt: ich will einfach Daten per HTTP an einen Server schicken.
Mein Code:

public void sendHTTP (String serverName, int serverPort, String data)
{
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://" + serverName + ":" + serverPort);

req.Method = "PUT";

req.AllowWriteStreamBuffering =
true;



Stream reqStream = req.GetRequestStream();

StreamWriter wrtr =
new StreamWriter(reqStream);



wrtr.WriteLine(data);

wrtr.Close();

req.GetResponse();



}


Die Daten kommen jetzt auch schon beim Server an. Wie kann ich aber nun die Verbindung abbauen?

Gruss,

MD
 
weil der Server kein Ende der Verbindung anzeigt.

Hier der Servercode:

publicvoid HandleConnection()

{

TcpClient tcpClient;

//Program blocks on Accept() until a client connects.

tcpClient = threadListener.AcceptTcpClient();

NetworkStream ns = tcpClient.GetStream();

connections++;

Console.WriteLine("New client accepted: {0} active connections", connections);


this.serverGUI.sw.WriteLine("Client is connected through HTTP.");

Byte[] received =
new Byte[512];

while (true)

{

int bytesReceived = ns.Read(received, 0, received.Length);

if (bytesReceived == 0)

break;

String dataReceived = System.Text.Encoding.ASCII.GetString(received,0, bytesReceived);


this.serverGUI.sw.WriteLine("HTTP Data: " + dataReceived + "");

}



this.serverGUI.sw.WriteLine("HTTP connection is closed.");

ns.Close();

tcpClient.Close();

connections--;

Console.WriteLine("Client disconnected: {0} active connections", connections);

}



Hat jemand ein Beispiel für einen einfachen Thread, der HTTP Request entgegenimmt. Mein Thread ist ja ein TCP Client. Funktioniert, aber die Verbindung wird nicht beendet.

Gruss,

MD
 
Du liest, und liest, und liest, und list.. ;)

Code:
using System;
using System.Net.Sockets;
using System.Threading;
using System.IO;

public class TestServer
{
  public static void Main(string[] args)
  {
    new TestServer();
  }

  public TestServer()
  {
    Listen();
  }

  TcpListener  listener;
  
  private void Listen()
  {
    listener = new TcpListener(5001);
    listener.Start();

    while (true)
    {
      RequestHandler rh = new RequestHandler(listener.AcceptTcpClient());
      Thread requestThread = new Thread(new ThreadStart(rh.Handle));
      requestThread.Start();
    }
  }

}

public class RequestHandler
{
  TcpClient tcpClient;

  public RequestHandler(TcpClient client)
  {
    tcpClient = client;
  }

  public void Handle()
  {
    StreamReader reader = new StreamReader(tcpClient.GetStream(),System.Text.Encoding.ASCII);

    Console.WriteLine("New client accepted");
    
    string data = "";
    int content_length = 0;
    
    while (reader.Peek() != -1)
    {

      string line = reader.ReadLine();
      if (line.StartsWith("Content-Length: "))
        content_length = int.Parse(line.Replace("Content-Length: ", ""));
             
      data += line;
    }
    
    reader.Close();
    
    tcpClient.Close();
    
    Console.WriteLine("Client disconnected");
    
  }
}
 
@Alexander: vielen Dank für die hilfreichen und extrem schnellen Anworten!

ich habe jetzt noch ein kleines Problem. So schaut mein Client aus:

public void sendHTTP (String serverName, int serverPort, String data)

{

HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://" + serverName + ":" + serverPort);

req.Method = "PUT";

req.AllowWriteStreamBuffering =
true;

Stream reqStream = req.GetRequestStream();

StreamWriter wrtr =
new StreamWriter(reqStream);

wrtr.WriteLine(data);

wrtr.Flush();

wrtr.Close();

req.GetResponse();



}


Der Server erkennt jetzt auch das Ende der Verbindung. "req.GetResponse()" verursacht jetzt jedoch folgende Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.Net.WebException' ist in System.dll aufgetreten.
Zusätzliche Informationen: Von der Übertragungsverbindung können keine Daten gelesen werden.

Gibt es einen anderen Befehl außer GetResponse() um die Daten zu schicken?

Gruss,

MD
 
Tjo, der Fehler liegt daran, das dein Server keine Daten schickt.
Probier mal ohne das GetResponse, wäre durchaus möglich das bereits durch das Schließen des Request-Streams der Request abgeschlossen ist.
 
nein, funktioniert nicht ohne getResponse. Deshalb habe ich das flush() hinzugefügt, ändert aber auch nichts.

Wie kann ich Daten zurückschicken? Eigentlich wollte ich darauf verzichten, aber ich kann es benutzen, um eine Prüfsumme zu übertragen.

Das Programm , das auf einem Pocket PC läuft, soll nämlich per UDP, TCP, HTTP und HTTPS über eine GPRS-Verbindung Daten übertragen und dabei möglichst wenig Traffic verursachen.
 
Code:
  public void Handle()
  {
    StreamReader reader = new StreamReader(tcpClient.GetStream(),System.Text.Encoding.ASCII);
    StreamWriter writer = new StreamWriter(tcpClient.GetStream());

    Console.WriteLine("New client accepted");
    
    string data = "";
    int content_length = 0;
    
    while (reader.Peek() != -1)
    {

      string line = reader.ReadLine();
      if (line.StartsWith("Content-Length: "))
        content_length = int.Parse(line.Replace("Content-Length: ", ""));
             
      data += line;
    }
    
    reader.Close();
    writer.WriteLine("Bla");
    
    tcpClient.Close();
    
    Console.WriteLine("Client disconnected");
    
  }
 

Neue Beiträge

Zurück