=============================代码如下===============================================
#include "Winsock.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"wsock32.lib")int giPortcount = 1; //端口计数器
CRITICAL_SECTION gCriticalSection;
struct sockaddr_in gDestAddr;DWORD WINAPI ScanThreadFunc()
{
SOCKET sock;
int Portcount;
for(;;)
{
Portcount = giPortcount;
if(Portcount >= 65535)
break;
sock=socket(AF_INET,SOCK_STREAM,0); //创建套接字
gDestAddr.sin_port=htons((unsigned short)Portcount);
if(connect(sock,(struct sockaddr*)&gDestAddr,sizeof(gDestAddr)) != SOCKET_ERROR) //可用端口
{
printf("Available port is : %d\n",Portcount);
}
else //不可用端口
{
//printf("unavailable port is : %d\n",Portcount);
}
EnterCriticalSection(&gCriticalSection);
giPortcount++;
LeaveCriticalSection(&gCriticalSection);
}
closesocket(sock);
return 0;
}
int main()
{
char cDestIP[16];
HANDLE hScanThread[64]; //最多64个扫描线程
int iThreadNum = 0;
int i; WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) //初始化套接字
{
WSACleanup();
return(-1);
}
printf("Please enter the IP you want to scan:  ");
gets(cDestIP);
gDestAddr.sin_family=AF_INET; //填充服务器地址及端口号
gDestAddr.sin_addr.s_addr=inet_addr(cDestIP);
InitializeCriticalSection(&gCriticalSection); //创建端口计数临界区 while((iThreadNum > 64) || (iThreadNum < 1))
{
printf("Please enter the Thread number you want to create (<=64):  ");
scanf("%d",&iThreadNum);
}
printf("Scaning please wait...\n\n");
for(i = 0; i < iThreadNum; i++)
{
hScanThread[i] = CreateThread(NULL,0,ScanThreadFunc,NULL,0,NULL);
}
WaitForMultipleObjects(iThreadNum,hScanThread,TRUE,INFINITE); //等待所有线程完成
DeleteCriticalSection(&gCriticalSection);
WSACleanup();
return 0;
}
============================================================================
在我的XP下运行正常,到机房98下运行到 
Scaning please wait...
就掉出来了,不能创建线程,学生请教!