我的代码是这样的:
CRecvtelCtrl::CRecvtelCtrl()
{
InitializeIIDs(&IID_DRecvtel, &IID_DRecvtelEvents);
AfxBeginThread(recv,this,THREAD_PRIORITY_NORMAL,0,0,NULL);
// TODO: Initialize your control's instance data here.
}
UINT recv(LPVOID p)
{
// MessageBox(AfxGetMainWnd()->m_hWnd,"in recv",NULL,NULL);
CRecvtelCtrl *in=(CRecvtelCtrl*)p;
SOCKADDR_IN myaddr;
WSADATA wsa;
SOCKET mysock;
if(WSAStartup(0x0202,&wsa))
{
in->msg="初始话失败";
}
mysock=socket(AF_INET,SOCK_DGRAM,0);
if(mysock==INVALID_SOCKET)
in->msg="创建套接字失败!";
myaddr.sin_family=AF_INET;
myaddr.sin_port=htons(LOWORD(9121));
myaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(bind(mysock,(sockaddr*)&myaddr,sizeof(myaddr))==SOCKET_ERROR)
in->msg="绑定失败!";
in->FireLoginstu(in->msg);
sockaddr_in sender;
char recvbuf[9];
memset(&recvbuf,0,sizeof(recvbuf));
CString tellast="";
for(;;)
{
int dwSender = sizeof(sender);
recvfrom(mysock, (char *)&recvbuf, sizeof(recvbuf), 0, (sockaddr *)&sender, &dwSender);
//MessageBox(AfxGetMainWnd()->m_hWnd,recvbuf,NULL,NULL);
CString mm=recvbuf;
if(tellast!=mm)
{
in->FireInfoin(mm);
}
Sleep(100);
tellast=mm;
memset(&recvbuf,0,sizeof(recvbuf));
}
return 0;
}
我查看,每次都是绑定失败。请问各位大哥是什么原因啊?应该怎么样处理?

解决方案 »

  1.   

    一个接受消息的AxtiveX// SockActiveXCtl.cpp : Implementation of the CSockActiveXCtrl ActiveX Control class.#include "stdafx.h"
    #include "SockActiveX.h"
    #include "SockActiveXCtl.h"
    #include "SockActiveXPpg.h"
    #include "comutil.h"#pragma comment( lib, "comsupp.lib" )#include <winsock.h>
    #define socklen_t int
    #pragma comment(lib, "wsock32.lib")SOCKET ListenSocket;
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define BUFFSIZE 6500
    SOCKET s;
    sockaddr_in client;
    sockaddr_in server;
    void socket_init();
    IMPLEMENT_DYNCREATE(CSockActiveXCtrl, COleControl)/////////////////////////////////////////////////////////////////////////////
    // CSockActiveXCtrl message handlers
    void socket_init()
    {
        int err;
    WSADATA wsdata;    
        err = WSAStartup(MAKEWORD(2, 0), &wsdata);
    s=socket(AF_INET,SOCK_DGRAM,0);
        
    memset((char *)&server,0,sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr("192.168.1.58");
    server.sin_port = htons(8888); if(bind(s,(sockaddr *)&server,sizeof(server)) != 0)
    {  
    printf(  "绑定失败\n");
      

    int optval = 1;
    int ret = setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval)); client.sin_family = AF_INET;
    client.sin_addr.S_un.S_addr = INADDR_BROADCAST;
    client.sin_port = htons(8888);
    }
    short CSockActiveXCtrl::RecvMessage(LPCTSTR message) 
    {
    // TODO: Add your dispatch handler code here
        fd_set           writefds;      // 等待可写性检查的套接口结构体
    unsigned long    ul = 1;
    struct timeval   timeout;       
    char buf[256]; int len=sizeof(client);
     
        
    if(ioctlsocket(s, FIONBIO, (unsigned long *) &ul) != SOCKET_ERROR)
    {
    int length=recvfrom(s,buf,256,0,(struct sockaddr *)&client,&len);
    if(length>0)
            { 
    buf[length]='\0';
    message=buf;
    }
    //MessageBox(message);
    }
    return 0;
    }BSTR CSockActiveXCtrl::receive1() 
    {
    CString strResult;
    // TODO: Add your dispatch handler code here    fd_set           writefds;      // 等待可写性检查的套接口结构体
    unsigned long    ul = 1;
    struct timeval   timeout;       
    char buf[256]; int len=sizeof(client);
     
        
    if(ioctlsocket(s, FIONBIO, (unsigned long *) &ul) != SOCKET_ERROR)
    {
    int length=recvfrom(s,buf,256,0,(struct sockaddr *)&client,&len);
    if(length>0)
            { 
    buf[length]='\0';
    strResult=buf;
    }
    //MessageBox(message);
    }    
    return strResult.AllocSysString();
    }