2010-07-09 3 views
0
private static Socket ConnectSocket(string server, int port) 
{ 
    Socket s = null; 
    IPHostEntry hostEntry = null; 

    hostEntry = Dns.GetHostEntry(server); 

    foreach (IPAddress address in hostEntry.AddressList) 
    { 
     IPEndPoint ipe = new IPEndPoint(address, port); 
     Socket tempSocket = 
      new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 

     tempSocket.Connect(ipe); 

     if (tempSocket.Connected) 
     { 
      s = tempSocket; 
      break; 
     } 
     else 
     { 
      continue; 
     } 
    } 
    return s; 
} 

//... 

Socket s = ConnectSocket(server, port); 

//... 

do 
{ 
    bytes = s.Receive(bytesReceived, bytesReceived.Length, 0); // 1 
    page = page + Encoding.UTF8.GetString(bytesReceived, 0, bytes); // 2 
} 
while (bytes == 1024); 

Это «страница», обрезанная (без конца) данных. Если между «//1» и «//2» напишите System.Threading.Thread.Sleep(100), тогда все будет работать.TcpClient.Receive - усеченные данные

ответ

0

Я не вижу, как это могло бы работать. Нет перехвата приема с тремя параметрами. Кроме того, вы поместили bytesReceived.Length в неправильное положение.

s.Receive(bytesReceived, 0, bytesReceived.Length); 

Edit: Оу. Вы используете ноль для SocketFlags. Не используйте магические числа.

Тогда ничего не говорится о том, что 1024 байта должны появляться каждый раз, TCP не построен таким образом. TCP только гарантирует, что все байты прибудут, а не когда и как.

Вы должны знать, сколько байтов вы собираетесь получать или отключать на другом конце, когда все отправлено.

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