我的代码是这样的:
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;
}
我查看,每次都是绑定失败。请问各位大哥是什么原因啊?应该怎么样处理?
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;
}
我查看,每次都是绑定失败。请问各位大哥是什么原因啊?应该怎么样处理?
#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();
}