GET в TCP-соединении с С#

Я написал программу в Delphi с запросом на TCP. Поскольку я начинаю работать с C#, я пытаюсь его перевести. Следуйте коду на Паскале, но, например, я не знаю, как заставить его работать на С#:


var
  s:shortstring;
  CR,LF:char;
  l:integer;
  buffer:TIdBytes;
  resp: TStringStream;
  ouvert:integer;
begin
  TCP:=TIdTCPClient.Create;
  CR:=chr(13);
  LF:=chr(10);
  TCP.Host:='192.168.52.203';
  TCP.Port:=80;
  TCP.Connect;
  if TCP.Connected then
  begin
    s:='GET /state.xml?noReply=0 HTTP/1.1'+CR+LF+'Authorization: Basic bm9uZTp3ZWJyZWxheQ=='+CR+LF+CR+LF;
    l:=Length(s);
    SetLength(buffer,l);
    Move(s[1],Buffer[0],l);
    TCP.IOHandler.Write(Buffer,l);
    resp := TStringStream.Create;
    TCP.IOHandler.ReadStream(resp,185);
    resp.Position:=0;
//    memoGet.Lines.LoadFromStream(resp);
    resp.Position:=0;
    s:=Resp.ReadString(185);

Спасибо за вашу помощь. Мишель

Есть ли какая-то причина, по которой вы хотели бы сделать это, а не использовать проверенный HTTP-клиент?

Jon Skeet 19.04.2023 12:50

Вам предлагается сделать попытку написать свой код. Если во время этой попытки вы столкнетесь с определенной технической проблемой, такой как ошибка или неожиданный результат, мы можем помочь с этим. Предоставьте конкретную информацию об этой попытке и о том, что не сработало должным образом. Чтобы узнать больше об этом сообществе и о том, как мы можем вам помочь, начните с тура и прочитайте Как спрашивать и связанные с ним ресурсы.

David 19.04.2023 12:52

Не «переводи» код. Выясните, что вы хотите сделать, а затем сделайте это на другом языке в экосистеме этого языка — каким бы этот другой язык ни был.

Fildor 19.04.2023 12:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете перевести его на C# через использование TcpClient и NetworkStream из пространства имен System.net.sockets.

Это может выглядеть так:

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main()
    {
        var tcp = new TcpClient();
        var cr = "\r";
        var lf = "\n";
        var host = "192.168.52.203";
        var port = 80;
        tcp.Connect(host, port);
        if (tcp.Connected)
        {
            var request = "GET /state.xml?noReply=0 HTTP/1.1" + cr + lf + "Authorization: Basic bm9uZTp3ZWJyZWxheQ= = " + cr + lf + cr + lf;
            byte[] buffer = Encoding.ASCII.GetBytes(request);
            var stream = tcp.GetStream();
            stream.Write(buffer, 0, buffer.Length);
            var reader = new StreamReader(stream);
            var response = reader.ReadToEnd();
            Console.WriteLine(response);
        }
    }
}

И в чем конкретно будет преимущество перед использованием HttpClient?

Fildor 19.04.2023 12:58

Никогда не говорилось, что это должен быть «HTTPS». Это всего лишь краткий пример, чтобы он/она могли иметь отправную точку.

Svetoslav Stoyanov 19.04.2023 13:00

Большое спасибо, все работает. Теперь у меня есть небольшая программа, написанная на C#, которая может сказать мне, открыта ли крыша моей автоматической астрономической обсерватории. Мишель

Рад, что это работает, не могли бы вы отметить мой ответ, чтобы люди знали, что это работает, спасибо!

Svetoslav Stoyanov 21.04.2023 11:33

Другие вопросы по теме