有几个问题你要检查一下:
1.如果是用API写,你的套接字要进行初始化,即WSAStartup
2.服务器要绑定,客户端不要绑定(TCP和UDP是一样的)
3.如果是UDP的话,发送是不用绑定的,接收要绑定
4.在你给SOCKADDR_IN进行初始化前,最好先清空一下 memset(&srvaddr,0,sizeof(srvaddr))
试试看行不行?

解决方案 »

  1.   

    to zhubo(zhunaldo):
    上面的都没有问题,
    我在WIN2000运行客户端和服务器端都没有问题,
    就是在WIN98下运行客户端出现上面问题,在WIN98下运行服务器端也没问题.
      

  2.   

    在一个工作线程中,pParam为SOCKET参数;
    UINT Workerproc(LPVOID pParam)
    {
    SOCKET sock=(SOCKET)pParam;
    int LeftLen=0;
    int ret; while(LeftLen<DEFAULT_BUFFER)
    {
    ret=recv(sock,g_RBuf+LeftLen,DEFAULT_BUFFER,0);
    if(ret<=0)
    {
    iError=ERROR_READ_FAILURE;
    break;
    }
    LeftLen+=ret;
    }
    iState=1;
    return 0;
    }
      

  3.   

    对,贴出来,我明天早上起来帮你看,睡觉去了,aha,好困阿!
      

  4.   

    win98的socket有总量限制,好像是198个,当有以前的未释放时,有可能会出现这样的问题。
      

  5.   

    你贴出来的代码应该没什么问题,把你的socketcreate和connect代码贴出来吧.
      

  6.   

    在主函数中:
    WSADATA wsd;
    SOCKET sClient;
    SOCKADDR_IN sock_address;
    WORD wVersion;
    CWinThread * pThread;
    DWORD dwNowTime; iState=0;
    iError=0;
    wVersion=MAKEWORD(2,0);
    if(WSAStartup(wVersion,&wsd)!=0)
    {
    TRACE("failed to init socket!");
    return ERROR_INIT_VERSION;
    } sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    if(sClient==SOCKET_ERROR)
    {
    TRACE("Create socket failed!");
    WSACleanup();
    return ERROR_INIT_SOCKET;
    } sock_address.sin_family =AF_INET;
    sock_address.sin_port =htons(atoi(szPort));
    sock_address.sin_addr.s_addr=inet_addr(szIP); if(connect(sClient,(struct sockaddr*)&sock_address,sizeof(sock_address)))
    {
    closesocket(sClient);
    return ERROR_CONN_FAILURE;
    } if(!T_Send(sClient,strSource))
    {
    return ERROR_SEND_FAILURE;
    } pThread=AfxBeginThread(Workerproc,(LPVOID)sClient);//这里启动线程,接收
      

  7.   

    现在是程序在Win2000下都可以运行,一到win98下就不行.
    主要是在线程Workerproc(见前面),中recv函数返回-1,用WSAGetLastError()得到WSAEINVAIL信息.
    我这个程序是DLL,被其他EXE程序调用的,不知是不是和这有关??