2015-02-04 3 views
2

Я хочу отправить HTTP-запрос с помощью TcpClient. Рассмотрим следующий код:TcpClient не может правильно отправлять данные по потоку

 byte[] buf = new byte[1024]; 
     string header = "GET http://w3.org HTTP/1.1\r\n" + 
         "Host: localhost:2006\r\n" + 
         "Connection: keep-alive\r\n" + 
         "User-Agent: Mozilla/5.0\r\n" + 
         "\r\n"; 

     var client = new TcpClient(); 
     client.Connect("w3.org", 80); 

     // send request 
     var stream = client.GetStream(); 
     var streamReader = new StreamReader(stream); 
     var streamWriter = new StreamWriter(stream); 

     client.Client.Send(System.Text.Encoding.ASCII.GetBytes(header)); 
     //streamWriter.Write(header); - DOES NOT WORK 
     stream.Flush(); 
     // get response 

     var response1 = streamReader.ReadLine(); 

Проблема заключается в том, что, когда я пытаюсь отправить данные с помощью метода Send Клиента - все работает отлично. Когда я пытаюсь предоставить данные по сетевому потоку - приложение зависает, и никаких исключений не было. Не могли бы вы рассказать мне о возможных проблемах?

+0

документ MSDN сказать и должно назвать подключиться к GetStream работать https://msdn.microsoft.com/en-us/library/ system.net.sockets.tcpclient.getstream (v = vs.110) .aspx – pm100

+0

Я редактировал исходный код - пытается подключиться, но все тот же эффект – seeker

ответ

5

StreamWriter также имеют внутренний буфер, и их необходимо промыть:

byte[] buf = new byte[1024]; 
string header = "GET http://w3.org HTTP/1.1\r\n" + 
       "Host: localhost:2006\r\n" + 
       "Connection: keep-alive\r\n" + 
       "User-Agent: Mozilla/5.0\r\n" + 
       "\r\n"; 

var client = new TcpClient(); 
client.Connect("w3.org", 80); 

// send request 
var stream = client.GetStream(); 
var streamReader = new StreamReader(stream); 
var streamWriter = new StreamWriter(stream); 

streamWriter.Write(header); 
streamWriter.Flush(); 
stream.Flush(); 

// get response 
var response1 = streamReader.ReadLine(); 
+0

спасибо, что решает проблему! – seeker

Смежные вопросы