Запись в сокет на сервер с отложенным ответом заставляет сокет переслать запрос - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь отправить запрос GET на сервер с классом сокета. Это мой тестовый код:

ConnectInternet();
String responseData = String.Empty;
String buffer = "GET /" + gLoginString + "/" + Command + "?winmob=" +
                ClassGlobalClass.VersioneJack + " HTTP/1.1";

if (SendHeader != null)
{
    buffer = buffer + "\nX: " + SendHeader;
}

buffer = buffer + "\n\n";

try
{

    Byte[] bytesSent = Encoding.ASCII.GetBytes(buffer);
    Byte[] bytesReceived = new Byte[256];
    Socket client = ConnectSocket("217.172.185.199", 5001);

    if (client == null)
        return ("Connection failed");

    // Send request to the server.
    client.Send(bytesSent, bytesSent.Length, SocketFlags.DontRoute);


    bool StopWhile = false;
    while (!StopWhile)
    {
        int bytes = 0;
        bytes = client.Receive(bytesReceived, bytesReceived.Length, 0);
        responseData = Encoding.ASCII.GetString(bytesReceived, 0, bytes);

        if (responseData != null & responseData != string.Empty)
        {
            StopWhile = true;
        }
    }
}

Когда я пишу в этот носок, сервер ждет, прежде чем ответить. Это заставляет C # сделать еще один запрос. Как я могу избежать этого?

ps: я нахожусь на Netcf3.5

EDIT: это вывод Netcat, когда снифф получает пакеты

$ nc -l -p 5001
GET /Test/send?winmob=version HTTP/1.1
X: 24   XXXXXXXXXX      123      pass                        test 2

GET /Test/send?winmob=version HTTP/1.1
X: 24   XXXXXXXXXX      123      pass                        test 2

GET /Test/send?winmob=version HTTP/1.1
X: 24   XXXXXXXXXX      123      pass                        test 2

GET /Test/send?winmob=version HTTP/1.1
X: 24   XXXXXXXXXX      123      pass                        test 2

GET /Test/send?winmob=version HTTP/1.1
X: 24   XXXXXXXXXX      123      pass                        test 2
...