各位大哥,我现在是初搞这个网络通信,本来不想搞,但实在是没有办法。救我。
情况如下:
我是想搞个通信,(初想用UDP)功能就是客户端的用户上下线保存。
是个STRUCT struct CliSer
{
int SendCase;
char User[6];
char Buff[1024];
} ;
CliSer *p,Cliser_App;//
strcpy(Cliser_App.User,user_id.GetBuffer(5));
p=&Cliser_App;
m_pSocetCli=new CSocetCli();
m_pSocetCli->Create(560,SOCK_DGRAM);
m_pSocetCli->SendTo(p,sizeof(Cliser_App),560,"127.0.0.1");
m_pSocetCli->Close();

解决方案 »

  1.   

    上帖还没有完:(上贴是客户端发过来用户名信息等。m_pSocetCli也是继承CAsyncSocket)
    m_pSockSer=new CSockSer();    //m_pSockSer是CAsyncSocket继承下来的。
    m_pSockSer->Create(560,SOCK_DGRAM);
    但是为什么就是接不到消息呢?
    其它内容:一、我已经初始化。if (!AfxSocketInit())
    {
    AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
    return FALSE;
    }
    二、已经添加#include <afxsock.h> // MFC socket extensionss
      

  2.   

    但是我绐终没有接收到消息呀。m_pSocetCli->SendTo(p,sizeof(Cliser_App),560,"127.0.0.1");
    返回的值为-1喔。怎么办呀。快帮我呀。
      

  3.   

    把你的代码多贴出来些,没有看到你的程序出现OnReceive或者Receive,不知道你怎么接收的数据
      

  4.   

    m_pSockSer->Create(560,SOCK_DGRAM);560端口是不可以给你用的,换个大点的端口,例如 7000什么的。
      

  5.   

    楼上的谢谢。我现在是可以接到消息了。因为在本机调试的时候都用了同一个端口,所以绑定不了。
    我现在问题是:用ReceiveFrom接收不到IP地址与端口呀。IP为空,端口为空。是怎么回事呢?
    现在都郁闷死了。
    void CSockSer::OnReceive(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    char buff[1024];
    CString IPAddr;
    UINT cPort;
    int lpcLen=30;
    ret=ReceiveFrom(buff,1024,IPAddr,cPort);
    if(ret==ERROR)
    {
    AfxMessageBox(_T("网络建立失改:\n"+WSAGetLastError()),MB_ICONEXCLAMATION);
    }
    else 
    {

    ((CUserList *)m_pDlg)->ShowUser(buff,IPAddr,cPort);
    }
    CAsyncSocket::OnReceive(nErrorCode);
    }
      

  6.   

    ret==ERROR???
    GetLastError看看错误码。
      

  7.   

    ret =-1,我刚才看了,
    GetLastError()为10040,这个是什么错误的呢?
    快帮帮我呀。
      

  8.   

    现在是可以接收到BUFF,但是就是得不到发消息端的IP与端口呀。分不够再加。快帮帮我呀。
      

  9.   

    在ReceiveFrom(buff,1024,IPAddr,cPort); 中没有看见你对IPAddr和cPort赋值啊。
      

  10.   

    建议楼主察看下buff里收到的是什么东西,是否和你预期的一致。
      

  11.   

    我客户端发送过来的数据为
    struct CliSer
    {
    int SendCase;
    char User[6];
    char HostName[50];
    char Buff[1024];
    } ;
    应该怎么操作呢?
    ReceiveFrom(buff,1024,IPAddr,cPort); 中的。1024应该改成多大呢?
      

  12.   

    难不成你这里的ReceiveFrom变成了对BUFF的解析函数?类似的用法我还从来没有遇到过。
      

  13.   

    char Buff[1024]; 
    这都已经是1024,你的buff最少要 4+6+50+1024那么大哦,这是单字节对齐的情况下。把buff设大点嘛,大点没事的,不把堆栈溢出就行了。
      

  14.   

    不是的,
    我当然不会这样。我是指出我的发送过的内容。
    ReceiveFrom(buff,1024,IPAddr,cPort); 
    我现在把buff改成2048,1024也改成2048,就已经可以的。我现在是要把这个结构体的大小算出来,然后再改成相同的大小就好了。
      

  15.   

    你为什么不建一个原始IP套接字,这样你可以自己分析IP地址和端口。如果你这样都觉得麻烦,那你就自己在客户端保存地址和端口,修改你的数据格式,把BUFF改成和至少你的结构大小一样。
      

  16.   

    有人知道,LIST怎么找到某一项进行删除吗?