tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
20
ZUGRIFFE
3553
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    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
    Geändert von MD1978 (17.12.04 um 17:40 Uhr)
     

  2. #2
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    Einfach GetResponse aufrufen und das zurückgegebene Objekt verwerfen.

    MfG,
    Alex
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  3. #3
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    Hallo,

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

    publicvoid 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
     

  4. #4
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Warum glaubst du, dass du noch eine hast?
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  5. #5
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    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
     

  6. #6
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Du liest, und liest, und liest, und list..

    Code :
    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
    
    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");
        
      }
    }
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  7. #7
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    @Alexander: vielen Dank für die hilfreichen und extrem schnellen Anworten!

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

    publicvoid 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
     

  8. #8
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    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.
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  9. #9
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    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.
     

  10. #10
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Code :
    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
    
      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");
        
      }
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  11. #11
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    ich habe die writer Statements eingefügt, aber ich kriege immer noch dieselbe Fehlermeldung.


    MD
     

  12. #12
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Mhh...

    Diese beiden Snippets jetzt funktionieren bei mir:

    Code :
    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
    
    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 :
    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
    
    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");
        
      }
    }
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  13. #13
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    Hallo,

    ich weiss nicht, ob ich was übersehen habe, aber wo unterscheiden sich die 2 Codes ?

    Gruss,

    MD
     

  14. #14
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Argh.. 2 mal das selbe gepostet.

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

    Code :
    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
    
    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();
     
      }
    }
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  15. #15
    MD1978 MD1978 ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    111
    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





     

Ähnliche Themen

  1. Frage zu Indy HTTP Antwort Stream
    Von real_benedikt im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 20.05.08, 23:09
  2. Http-request ?!
    Von mIschKo im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 03.10.07, 18:32
  3. Http Request
    Von NanoNuna im Forum PHP
    Antworten: 2
    Letzter Beitrag: 02.04.07, 10:55
  4. Http - Request
    Von rauchmelder im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 04.12.04, 22:42