服务器是好的
用下的客户端可以连上和接受消息!
但是用我写的就不能接受都数据:
客户端代码:
WSADATA wsaData;
SOCKET  sClient;
int iPort = DEFAULT_PORT;
int iLen;
char buf[]="165428";//DATA_BUFFER
char IP[50]="127.0.0.1"; struct sockaddr_in ser; memset(buf,0,sizeof(buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n");
return 0;
}
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
ser.sin_addr.s_addr=inet_addr(IP); sClient=socket(AF_INET,SOCK_STREAM,0); if(sClient == INVALID_SOCKET)
{
printf("socket()Failed:%d\n",WSAGetLastError());
return 0;

}
if(connect(sClient,(struct sockaddr *)&ser,sizeof(ser))==INVALID_SOCKET)
{
printf("connect()Falied:%d\n",WSAGetLastError());
return 0;

}
else
{
iLen=send(sClient,buf,sizeof(buf),0);
 if(iLen==SOCKET_ERROR)
{
printf("sent()Failed:%d\n",WSAGetLastError()); return 0;

}
}

解决方案 »

  1.   

    建议楼主调试一下,是在那个地方出错了,是否是创建SOCKET的时候出错了
    或者是连接服务器的时候出错,看看你的IP地址和端口是否设置正确
    主要是查看那个地方出错了
      

  2.   

    服务器有代码吗?也许其中有使用到相应的“协议”,而你发的数据太过随意。比如Delphi用Indy写的,如果服务端使用的是ReadLn,那么它的协议就是以"\r\n"结束,而你提供的内容当中没有,所以服务器会一直等"\r\n"的出现,等等...
      

  3.   

    我的服务器是MFC程序!!
    客户端是控制台程序!
    需要什么注意的么??
      

  4.   

    是你写的吗?如果不是就把它的接收recv执行的那段代码贴上来。
      

  5.   


    char szText[1024]="\0";
    ::recv(s,szText,1024,0);
    GetDlgItem(IDC_EDIT1)->SetWindowText(szText)
      

  6.   

    根据recv的返回值判断下是否接收完毕,或者是有错误发生
      

  7.   

    那就是接收出错,调用GetLastError();看看是什么错误
      

  8.   

    自己应该主动一点,查下MSDN
    An operation was attempted on something that is not a socket.应该是你在哪个地方把端口关闭了。代码又不全,无法判断
      

  9.   

    那你总要把代码贴全吧?就贴3行代码,让别人怎么判断?我初步估计是你哪个数据越界破坏了socket
      

  10.   

    void ADDdlg::OnStart() 
    {
    // TODO: Add your control notification handler code here
    WSADATA wsaData;
    struct sockaddr_in ser,cli;
    WSAStartup(MAKEWORD(2,2),&wsaData);
    if(m_socket == INVALID_SOCKET)
    {
    CString sPort;
    GetDlgItem(IDC_PORT)->GetWindowText(sPort);
    int nPort=atoi(sPort);
    if(nPort<1||nPort>65535)
    {
    MessageBox("端口号错误!");
    return;

    }
    if(m_socket == INVALID_SOCKET)
    {
    closesocket(m_socket);
    }
    m_socket = socket(AF_INET,SOCK_STREAM,0);
    if(m_socket == INVALID_SOCKET)
    return;
    ser.sin_family = AF_INET;
    ser.sin_port = htons(nPort);
    ser.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(m_socket,(LPSOCKADDR)&ser,sizeof(ser)) == SOCKET_ERROR)
    return;
    ::WSAAsyncSelect(m_socket,m_hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE); listen(m_socket,5);     GetDlgItem(IDC_START)->SetWindowText("停止服务");
    GetDlgItem(IDC_PORT)->EnableWindow(FALSE);
    GetDlgItem(IDC_Con)->SetWindowText("正在监听......");
    // GetDlgItem(IDC_EDIT1)->SetWindowText(sPort); //m_bar.SetText("正在监听......");// int iLen = sizeof(cli);
    // SOCKET sAccept = accept(m_socket,NULL,NULL);//(struct sockaddr*)&cli,&iLen
    // if(sAccept == INVALID_SOCKET)
    // return;
    //
    }

    else
    {
    if(m_socket != INVALID_SOCKET)
    ::closesocket(m_socket);
    GetDlgItem(IDC_Con)->SetWindowText("");
    m_socket = INVALID_SOCKET;
            GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
    GetDlgItem(IDC_START)->SetWindowText("开启服务");
    }
    }long ADDdlg::OnSocket(WPARAM wParam,LPARAM lParam)
    {
    // 取得有事件发生的套节字句柄
    SOCKET s = wParam;
    ADOConn con;
    // char m_IP[100]="\0",m_TIME[100]="\0",m_DATA[100]="\0",m_NAME[100]="\0";
    // int m_ID=0, m_SIZE=0,m_ORDER=0;
    // 查看是否出错
    if(WSAGETSELECTERROR(lParam))
    {
    ::closesocket(s);
    return 0;
    }
    // 处理发生的事件
    switch(WSAGETSELECTEVENT(lParam))
    {
    case FD_ACCEPT: // 监听中的套接字检测到有连接进入
    {


    // 接受连接请求,新的套节字client是新连接的套节字
    SOCKET client = ::accept(s, NULL, NULL);
    // 设置新的套节字为窗口通知消息类型
    int i = ::WSAAsyncSelect(client, 
    m_hWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE);



    }
    break; case FD_CLOSE: // 检测到套接字对应的连接被关闭。
    {
    ::closesocket(s);
    }
    break; case FD_READ: // 套接字接受到对方发送过来的数据包
    {
    char szText[1024]="\0";
    memset(szText,0,sizeof(szText));
    int rLen=::recv(s,szText,1024,0); GetDlgItem(IDC_EDIT1)->SetWindowText(szText);           
    // _variant_t RecordsAffected;
    // CString strSQL;
    // strSQL.Format("INSERT INTO new(f_ID,f_SIZE,f_NAME,f_IP,f_TIME,f_ORDER,f_DATA) VALUES(%d,%d,%s,%s,%s,%d,%s)",
    // m_ID,m_SIZE,m_NAME,m_IP,m_TIME,m_ORDER,m_DATA);
    // con.m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText);
    }
    break;
    }
    return 0;
    }
      

  11.   

    char buf[]="165428";//DATA_BUFFER 客户端程序,设置了buf内容,下面又清0,是不是这里的问题?memset(buf,0,sizeof(buf)); 其他的问题我倒没发现,我测试了你的全部代码,没有问题