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)がある場合、すべてが機能します。

4

1 に答える 1

0

それがどのように機能するかわかりません。パラメータが 3 つしかない受信オーバーロードはありません。また、bytesReceived.Length を不適切な位置に配置しました。

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

編集:ああ。SocketFlags にゼロを使用しています。マジックナンバーを使用しないでください。

次に、毎回1024バイトが到着する必要があると言うものは何もありません。TCPはそのように構築されていません。TCP は、いつ、どのようにではなく、すべてのバイトが到着することのみを保証します。

受信するバイト数を知っているか、すべてが送信されたときに相手側で切断する必要があります。

于 2010-07-09T09:17:46.527 に答える