HTTP Request schicken, aber keine Antwort erhalten

Mhh...

Diese beiden Snippets jetzt funktionieren bei mir:

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);
    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;
    }
    
    writer.Write("Blaaaa");
    writer.Close();
    reader.Close();
    
    tcpClient.Close();
    
    Console.WriteLine("Client disconnected");
    
  }
}

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);
    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;
    }
    
    writer.Write("Blaaaa");
    writer.Close();
    reader.Close();
    
    tcpClient.Close();
    
    Console.WriteLine("Client disconnected");
    
  }
}
 
Argh.. 2 mal das selbe gepostet.

Hier der Code für den Request den ich benutzte zum Testen.

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

public class Test
{
  public static void Main(string[] args)
  {
    string serverName = "localhost";
    int serverPort = 5001;
    string data = "name=alex";

    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();

  }
}
 
Hallo Alexander,
Dein Client und Server funktioniert.

Wenn ich aber Deinen Client als Pocket PC Anwendung kompiliere, werden keine Daten an den Server geschickt, obwohl die Klassen alle im Compact Framework auch unterstützt werden.
Komisch!
Wenn ich dann req.GetResponse() beim Client hinzufüge, kommen die Daten beim Server an, aber beim Client gibt es wieder folgende Fehlermeldung:
"Von der Übertragungsverbindung können keine Daten gelesen werden."
MD
 
Arghs. Das ich das nicht vorher probiert habe.
Damit du GetResponse aufrufen kannst, solltest auch eine gültige HTTP-Antwort zurückschicken.

Hier jetzt nochmal eine funktionierende Handle-Methode.
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;
    }
    
    string buffer = "";
    buffer = buffer + "HTTP/1.1 200\r\n";
    buffer = buffer + "Server: testserver\r\n";
    buffer = buffer + "Accept-Ranges: byte" + "\r\n";
    buffer = buffer + "Content-Type: text/html\r\n";
    buffer = buffer + "Content-Length: 6\r\n\r\n";

    writer.Write(buffer);
    writer.Write("Blaaaa\r\n");
    writer.Close();
    reader.Close();
    
    tcpClient.Close();
    
    Console.WriteLine("Client disconnected");
    
  }

MfG,
Alex
 
das ändert irgendwie nichts.
Füge mal in Deinen Client "req.GetResponse();" ein und Du erhälst eine Fehlermeldung.

Gruss,

MD
 
@Alexander:
Ich habe es mir nochmals angeschaut, aber ich komme nicht weiter, da ich immer noch die Fehlermeldung erhalte. Hast Du ne Idee?

Gruss,

MD
 
Wenn du jetzt wirklich den selben Code verwendest wie ich, mit dem HTTP-Header der auch zurück geschickt wird, und so weiter, weiss ich wirklich nicht warum du noch immer eine Meldung bekommst.

Kompiliert hast ja, oder? *fg*
 
Zurück