2010-07-09 79 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); 

编辑:喔。您正在使用SocketFlags的零值。不要使用幻数。

然后没有什么说每次都必须到达1024个字节,TCP不是那样构建的。 TCP只能保证所有字节都会到达,而不是何时或如何。

您必须知道一旦发送了所有内容,您将在另一端接收或断开多少个字节。