SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)
我把它设为混杂模式hThread = CreateThread(NULL, 0, FluxThread, (LPVOID)sRaw, 0, NULL);int rc;
int oldLength = 0; while (1)
{
rc = WaitForMultipleObjects(1, &hThread, TRUE, 1000);
if (rc == WAIT_FAILED)
{
printf(" error " );
}
else if (rc == WAIT_TIMEOUT)
{
ULONG bps; bps = gLength - oldLength;
printf("\n\n-------------------------------\n");
printf("bytes per second read: %lu\n", bps);
oldLength = gLength;
}
else
{
break;
}
}bps是每秒的流量值
gLength是我从开始的总流量
oldLength是上一次的总流量
DWORD WINAPI FluxThread(LPVOID lpParam)
{
// 开始接收封包
char buff[1024];
int nRet;
SOCKET s; s = (SOCKET) lpParam; while(TRUE)
{
nRet = recv(s, buff, 1024, 0);
if(nRet > 0)
{
gLength += nRet;
}
}
}
我把收到的值加至gLength求的值过小总是几K但是我的实际流量是几十K
if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)
我把它设为混杂模式hThread = CreateThread(NULL, 0, FluxThread, (LPVOID)sRaw, 0, NULL);int rc;
int oldLength = 0; while (1)
{
rc = WaitForMultipleObjects(1, &hThread, TRUE, 1000);
if (rc == WAIT_FAILED)
{
printf(" error " );
}
else if (rc == WAIT_TIMEOUT)
{
ULONG bps; bps = gLength - oldLength;
printf("\n\n-------------------------------\n");
printf("bytes per second read: %lu\n", bps);
oldLength = gLength;
}
else
{
break;
}
}bps是每秒的流量值
gLength是我从开始的总流量
oldLength是上一次的总流量
DWORD WINAPI FluxThread(LPVOID lpParam)
{
// 开始接收封包
char buff[1024];
int nRet;
SOCKET s; s = (SOCKET) lpParam; while(TRUE)
{
nRet = recv(s, buff, 1024, 0);
if(nRet > 0)
{
gLength += nRet;
}
}
}
我把收到的值加至gLength求的值过小总是几K但是我的实际流量是几十K
因为nRet = recv(s, buff, 1024, 0);
这个的返回值是Byte
我意外地把1024改成5120得到的流量就比较大