我不知道为什么下面这个程序要在命令提示符下运行,用的命令就是函数名.而直接运行却不能???

程序的功能大概是这样的:从键盘输入要要连接的服务器的IP 和端口   如果连接成功 就可以发送字符串   
程序还设置了特殊事件的响应函数

#pragma comment(lib,"ws2_32.lib")
#include <STDIO.H>
#include <WINSOCK2.H>

SOCKET g_sockClient=INVALID_SOCKET;
void usage();

BOOL WINAPI CtrlHandler(DWORD dwEvent);

int main(int argc,char *argv[])
{
    unsigned long destAddr;
    int nPort;
    if(argc==2){
        destAddr=inet_addr(argv[1]);
        if(destAddr==INADDR_NONE){
            usage();
            return -1;
        }
        nPort=23;
    }
    else
        if(argc==3){
            destAddr=inet_addr(argv[1]);
            if(destAddr==INADDR_NONE){
                usage();
                return -1;
            }
            nPort=atoi(argv[2]);
            if(nPort<0||nPort>65535){
                usage();
                return -1;
            }
        }
        else{
            usage();
            return -1;
        }
        if(!SetConsoleCtrlHandler(CtrlHandler,TRUE)){
            printf("SetConsoleCtrlHandler:%d\n",GetLastError());
            return -1;
        }

    
    WSAData wsaData;
    WSAStartup(WINSOCK_VERSION,&wsaData);
    g_sockClient=socket(AF_INET,SOCK_STREAM,0);
    if(g_sockClient==INVALID_SOCKET){
        WSACleanup();
        return -1;
    }

    struct sockaddr_in to;
    memset(&to,0,sizeof(to));
    to.sin_addr.s_addr=destAddr;
    
    to.sin_family=AF_INET;
    to.sin_port=htons(nPort);
    printf("connect %s:%d.......",inet_ntoa(to.sin_addr),nPort);
        if(connect(g_sockClient,(struct sockaddr *)&to,sizeof(to))==SOCKET_ERROR){
            if(g_sockClient!=INVALID_SOCKET)
                closesocket(g_sockClient);
            printf("Failed.(connect %d)\n",WSAGetLastError());
            WSACleanup();
            return -1;
        }
        else
            printf("Successfully.\n INPUT:\n");
        char bufa[83];
        char bufb[1000];
        fd_set readSet;
        struct timeval tv;
        int ret,len;
        while(1){
            memset(bufa,0,83);
            gets(bufa);
            len=strlen(bufa);
            if(len>80)len=80;
            bufa[len]='\r';
            bufa[len+1]='\n';
            bufa[len+2]='0';
            ret=send(g_sockClient,bufa,strlen(bufa),0);
            if(ret==SOCKET_ERROR){
                printf("send:%d\n",WSAGetLastError());
                break;
            }
            FD_ZERO(&readSet);
            FD_SET(g_sockClient,&readSet);
            tv.tv_sec=3;
            tv.tv_usec=0;
            ret=select(0,&readSet,NULL,NULL,&tv);
            if(ret==SOCKET_ERROR){ 
                printf("select:%d\n",WSAGetLastError());
                break;
            }
            if(ret==0){
                printf("Timeout,NoResponse From Server.\n");
                break;
            }
            if(FD_ISSET(g_sockClient,&readSet)){
                memset(bufb,0,1000);
                ret=recv(g_sockClient,bufb,1000,0);
                if(ret==SOCKET_ERROR){ 
                printf("select:%d\n",WSAGetLastError());
                break;
                }
                else
                    printf("%s\n",bufb);
            }
        }
        if(g_sockClient!=INVALID_SOCKET)
            closesocket(g_sockClient);

    WSACleanup();
    printf("Stopped.\n");

    return 0;
}
void usage()
{
    printf("usage;\tmytelnet x.x.x.x port\t\t\t(0<port<65535)\n");

}
BOOL WINAPI CtrlHandler(DWORD dwEvent)
{
    switch(dwEvent){
    case CTRL_C_EVENT:
    case CTRL_LOGOFF_EVENT:
    case CTRL_SHUTDOWN_EVENT:
    case CTRL_CLOSE_EVENT:
        printf("stoppint.....\n");
        closesocket(g_sockClient);
        g_sockClient=INVALID_SOCKET;
        break;
    default:
        return FALSE;
    }
    return TRUE;
}