2010-09-27 26 views
-3

socket.Available不起作用。为什么?我需要使用socket.Available而不是size。但它不起作用。所以我需要一个返回socket中字节数的方法。返回TCP/IP套接字中可用字节数的方法

void Receive(Socket socket, byte[] buffer, int offset, int size) 
{ 
    //int sockAvail = socket.Available; Here socket.Available always asigns 0 to sockAvail 
    int received = 0; 

    do 
    { 
     try 
     { 
      received += socket.Receive(buffer, offset + received, size - received, SocketFlags.None); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 

    } while (received < size); 

    MessageBox.Show(socket.Available.ToString()); 
} 
+0

你到底想干什么?连接缓冲区中的字节数是您正在查找的内容还是尚未传输的数字? – 2010-09-27 12:27:11

+2

为什么标记为C? – 2010-09-27 12:28:02

+1

如果读取'Receive'操作中的所有可用字节,'socket.Available'可能是'0'或'false'(不确定返回类型,对不起)。 – leppie 2010-09-27 12:29:06

回答

0

socket.Available是用于阻塞套接字。通过异步读取,您只需阅读可以读取的内容,然后返回到可以阅读更多内容的选择中。

+0

我正在使用同步读取,尽管它不起作用 – 2010-09-27 12:32:44

+0

socket.Available返回整数,但在读取接收到的字节之前,它显示0 – 2010-09-27 12:52:08

+0

socket.Available何时将其值赋值给变量 – 2010-09-28 12:04:36

3

通过MSG_PEEKrecv()

+0

我需要在套接字中传输的字节数。 – 2010-09-27 15:12:32

+0

插座怎么知道?它知道有多少已被传输但尚未从应用程序读取 - 这就是可用性。您可能需要在更高级别上工作才能知道 - 例如,如果您要传输HTTP,则可以查看内容长度标题以了解内容有多大(它是可选的,但这仅仅是一个示例) – 2010-09-27 15:44:03

0

它确实有效。它只是不符合你的期望。你的期望是错误的。调整它们。

1

Socket.Available有到缓冲区之前调用,否则它始终为0。

相关问题