//局域网广播的程序#pragma comment(lib,"ws2_32.lib")
#include <Winsock2.h>
#include <time.h>
#include <stdio.h>
int init_socket_library()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if (err!=0)
{
return SOCKET_ERROR;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup();
return SOCKET_ERROR;
}
return 0;
}
SOCKET m_socket;
int binding()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if (m_socket==INVALID_SOCKET)
{
return -1;
}
//Set no-blocking
ULONG flages=1;
if (ioctlsocket(m_socket,FIONBIO,&flages)==-1)
{
return -1;
}
//Set broadcasting
bool boptionvalue=true;
if (setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char*)&boptionvalue,sizeof(bool))==-1)
{
return -1;
}
sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family=AF_INET;
address.sin_addr.s_addr=htonl(INADDR_ANY);
while (1)
{
srand( (unsigned)time( NULL ) );
ULONG port=rand()%10000;
address.sin_port=htons(port);
if ( bind(m_socket,(sockaddr*)&address,sizeof(address))!=SOCKET_ERROR )
{
break;
}
}
return 0;
}
int main()
{
init_socket_library();
binding(); sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family= AF_INET;
address.sin_port=htons(1133);//端口
address.sin_addr.s_addr=0xffffffff;//INADDR_BROADCAST
char buffer[1024];
memset(buffer,0,1024);
memcpy(buffer,"abcd",sizeof("abcd"));
int len=sizeof(address);
while(true)
{
if (sendto(m_socket,buffer,sizeof(buffer),0,
(struct sockaddr*)&address,len)==SOCKET_ERROR)
{
printf("sendto error%d\r\d",GetLastError());
}
Sleep(100);
}
}
//接收广播消息的程序,communication::communication(void)
{
m_socket=INVALID_SOCKET;
init_socket_library();
binding();
DWORD threadID;
m_thread=CreateThread(NULL,0,LPTHREAD_START_ROUTINE(&ThreadProc),
this,0,&threadID);
}communication::~communication(void)
{
}void __stdcall communication::ThreadProc(LPVOID lpParameter)
{
// return ;
communication *m_commu=(communication*)lpParameter;
printf("Thread started\r\n");
sockaddr_in temp_address;
memset(&temp_address,0,sizeof(temp_address));
int address_length=sizeof(temp_address);
fd_set fd_read,fd_write;
timeval tmval;
tmval.tv_sec=2;
tmval.tv_usec=0; listen(m_commu->m_socket,63);
while ( true)
{
FD_ZERO(&fd_read);//将读清零
FD_ZERO(&fd_write);//将写清零 FD_SET(m_commu->m_socket,&fd_read);
if ( select(0,&fd_read,&fd_write,NULL,&tmval)!=SOCKET_ERROR)
{
if (FD_ISSET(m_commu->m_socket,&fd_read))
{//有新的连接到来
SOCKET temp_socket=accept(m_commu->m_socket,
( sockaddr*)&temp_address,&address_length);
// printf("%s is incoming\r\n",inet_ntoa(temp_address.sin_addr));
printf("%d\r\n",GetLastError());//返回得到10045错误
if (temp_socket!=INVALID_SOCKET)
{
ULONG flages=1;
if (ioctlsocket(temp_socket,FIONBIO,&flages)!=SOCKET_ERROR )
{
m_commu->m_client_socket_list.push_back(temp_socket);
printf("%s is incoming\r\n",inet_ntoa(temp_address.sin_addr));
}
}
}
}
FD_ZERO(&fd_read);//将读清零
list<SOCKET>::const_iterator it;
for (it=m_commu->m_client_socket_list.begin();it!=m_commu->m_client_socket_list.end();++it)
{
FD_SET(*it,&fd_read);
} if ( select(0,&fd_read,NULL,NULL,&tmval)!=SOCKET_ERROR )
{
for (it=m_commu->m_client_socket_list.begin();it!=m_commu->m_client_socket_list.end();++it)
{
if ( FD_ISSET(*it,&fd_read) )
{//接收数据
char recvbuff[1025];
memset(recvbuff,0,sizeof(recvbuff));
// recvfrom(*it,recvbuff,sizeof(recvbuff),)
recv(*it,recvbuff,sizeof(recvbuff),0);
printf("recv buffer:%s\r\n",recvbuff);
}
}
} Sleep(100);
}
}int communication::init_socket_library()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData );
if (err!=0)
{
return SOCKET_ERROR;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup();
return SOCKET_ERROR;
}
return 0;
}
int communication::binding()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if (m_socket==INVALID_SOCKET)
{
return -1;
} //Set no-blocking
ULONG flages=1;
if (ioctlsocket(m_socket,FIONBIO,&flages)==-1)
{
return -1;
} //Set broadcasting
bool boptionvalue=true;
if (setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char*)&boptionvalue,sizeof(bool))==-1)
{
return -1;
} sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family=AF_INET;
address.sin_addr.s_addr=htonl(INADDR_ANY);
while (1)
{
srand( (unsigned)time( NULL ) );
ULONG port=rand()%10000;
port=1133;////////////先指定port
address.sin_port=htons(port);
if ( bind(m_socket,(sockaddr*)&address,sizeof(address))!=SOCKET_ERROR )
{
break;
}
}
return 0;}
void communication::clear_socket_library()
{
WSACleanup();
}
#include <Winsock2.h>
#include <time.h>
#include <stdio.h>
int init_socket_library()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if (err!=0)
{
return SOCKET_ERROR;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup();
return SOCKET_ERROR;
}
return 0;
}
SOCKET m_socket;
int binding()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if (m_socket==INVALID_SOCKET)
{
return -1;
}
//Set no-blocking
ULONG flages=1;
if (ioctlsocket(m_socket,FIONBIO,&flages)==-1)
{
return -1;
}
//Set broadcasting
bool boptionvalue=true;
if (setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char*)&boptionvalue,sizeof(bool))==-1)
{
return -1;
}
sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family=AF_INET;
address.sin_addr.s_addr=htonl(INADDR_ANY);
while (1)
{
srand( (unsigned)time( NULL ) );
ULONG port=rand()%10000;
address.sin_port=htons(port);
if ( bind(m_socket,(sockaddr*)&address,sizeof(address))!=SOCKET_ERROR )
{
break;
}
}
return 0;
}
int main()
{
init_socket_library();
binding(); sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family= AF_INET;
address.sin_port=htons(1133);//端口
address.sin_addr.s_addr=0xffffffff;//INADDR_BROADCAST
char buffer[1024];
memset(buffer,0,1024);
memcpy(buffer,"abcd",sizeof("abcd"));
int len=sizeof(address);
while(true)
{
if (sendto(m_socket,buffer,sizeof(buffer),0,
(struct sockaddr*)&address,len)==SOCKET_ERROR)
{
printf("sendto error%d\r\d",GetLastError());
}
Sleep(100);
}
}
//接收广播消息的程序,communication::communication(void)
{
m_socket=INVALID_SOCKET;
init_socket_library();
binding();
DWORD threadID;
m_thread=CreateThread(NULL,0,LPTHREAD_START_ROUTINE(&ThreadProc),
this,0,&threadID);
}communication::~communication(void)
{
}void __stdcall communication::ThreadProc(LPVOID lpParameter)
{
// return ;
communication *m_commu=(communication*)lpParameter;
printf("Thread started\r\n");
sockaddr_in temp_address;
memset(&temp_address,0,sizeof(temp_address));
int address_length=sizeof(temp_address);
fd_set fd_read,fd_write;
timeval tmval;
tmval.tv_sec=2;
tmval.tv_usec=0; listen(m_commu->m_socket,63);
while ( true)
{
FD_ZERO(&fd_read);//将读清零
FD_ZERO(&fd_write);//将写清零 FD_SET(m_commu->m_socket,&fd_read);
if ( select(0,&fd_read,&fd_write,NULL,&tmval)!=SOCKET_ERROR)
{
if (FD_ISSET(m_commu->m_socket,&fd_read))
{//有新的连接到来
SOCKET temp_socket=accept(m_commu->m_socket,
( sockaddr*)&temp_address,&address_length);
// printf("%s is incoming\r\n",inet_ntoa(temp_address.sin_addr));
printf("%d\r\n",GetLastError());//返回得到10045错误
if (temp_socket!=INVALID_SOCKET)
{
ULONG flages=1;
if (ioctlsocket(temp_socket,FIONBIO,&flages)!=SOCKET_ERROR )
{
m_commu->m_client_socket_list.push_back(temp_socket);
printf("%s is incoming\r\n",inet_ntoa(temp_address.sin_addr));
}
}
}
}
FD_ZERO(&fd_read);//将读清零
list<SOCKET>::const_iterator it;
for (it=m_commu->m_client_socket_list.begin();it!=m_commu->m_client_socket_list.end();++it)
{
FD_SET(*it,&fd_read);
} if ( select(0,&fd_read,NULL,NULL,&tmval)!=SOCKET_ERROR )
{
for (it=m_commu->m_client_socket_list.begin();it!=m_commu->m_client_socket_list.end();++it)
{
if ( FD_ISSET(*it,&fd_read) )
{//接收数据
char recvbuff[1025];
memset(recvbuff,0,sizeof(recvbuff));
// recvfrom(*it,recvbuff,sizeof(recvbuff),)
recv(*it,recvbuff,sizeof(recvbuff),0);
printf("recv buffer:%s\r\n",recvbuff);
}
}
} Sleep(100);
}
}int communication::init_socket_library()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData );
if (err!=0)
{
return SOCKET_ERROR;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup();
return SOCKET_ERROR;
}
return 0;
}
int communication::binding()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if (m_socket==INVALID_SOCKET)
{
return -1;
} //Set no-blocking
ULONG flages=1;
if (ioctlsocket(m_socket,FIONBIO,&flages)==-1)
{
return -1;
} //Set broadcasting
bool boptionvalue=true;
if (setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char*)&boptionvalue,sizeof(bool))==-1)
{
return -1;
} sockaddr_in address;
memset(&address,0,sizeof(sockaddr_in));
address.sin_family=AF_INET;
address.sin_addr.s_addr=htonl(INADDR_ANY);
while (1)
{
srand( (unsigned)time( NULL ) );
ULONG port=rand()%10000;
port=1133;////////////先指定port
address.sin_port=htons(port);
if ( bind(m_socket,(sockaddr*)&address,sizeof(address))!=SOCKET_ERROR )
{
break;
}
}
return 0;}
void communication::clear_socket_library()
{
WSACleanup();
}
解决方案 »
- mpeg2中的GOP头不是字节对齐的
- CRegesterDialog dlg;
- 想买一本书,不知道是买第4版的好还是买第5般的,请帮我出出主意,谢谢
- 能否同时在A类中声明B类对象,在B类中声明A类对象
- 如何让窗口不在接收消息
- 怎样获得Edit(或者RichEdit)控件的数据的实际存放地址?
- 这句怎么写????
- 请问怎样用socket进行post表单。(不是用MFC),怎么搞呢?
- 关于Create对话框窗口的问题
- DLL的一个Exports Function,返回一个LPTSTR,此LPTSTR如何释放内存?
- real文件去广告是如何实现的?
- 关于CSpinButtonCtrl不能设置负数问题!
我原来也是在UDPserver中用accept出线这样的错误
UDP的写法和TCP应该是有差别的,sendto recvfrom包括似乎不需要用accept
呵呵,我也不是很熟悉。楼主自己检查一下
第二对UDP的接收发送有专用的API,sendto,recvfrom