64,642
社区成员
发帖
与我相关
我的任务
分享
int StartSocket(LPVOID pParam)
{
SOCKET sock; //定义嵌套字
sockaddr_in addrto;
WSADATA wsdata;
//bool bsocket;
char smsg[100] = { "socket" };//UDP广播标识
int err = WSAStartup(0x0202, &wsdata);//启动SOCKET库,版本为2.0,也可以按下面的方法进行启动
if (0 != err)
{
return -1;
}
sock = WSASocketW(AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
addrto.sin_family = AF_INET;
addrto.sin_addr.s_addr = INADDR_BROADCAST;
addrto.sin_port = htons(9000);
bool opt = TRUE;
//设置该套接字为广播类型,
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char FAR *)&opt, sizeof(opt));
int nlen = sizeof(addrto);
char buf[100] = { 0 };
//从广播地址发送消息
int ret = sendto(sock, smsg, strlen(smsg) + 1, 0, (sockaddr*)&addrto, nlen);
if (ret == SOCKET_ERROR)
{
HWND hWnd = NULL;
GetParent(hWnd);
MessageBox(hWnd, _T("erro"), _T("erro"), MB_OK);
}
ret = recvfrom(sock, buf, sizeof(buf), 0, (sockaddr*)&addrto, &nlen);
...//buf内容的处理
return 0;
}
int StarSocket()
{
SOCKET sock;
sockaddr_in from,a;
WSADATA wsdata;
bool optval;
//启动SOCKET库,版本为2.0
WSAStartup(0x0202,&wsdata);
optval=true;
//然后赋值给两个地址,一个用来绑定套接字,一个用来从网络上的广播地址接收消息;
a.sin_family=AF_INET;
a.sin_addr.s_addr=INADDR_ANY;
a.sin_port=htons(9000);
from.sin_family=AF_INET;
from.sin_addr.s_addr=INADDR_BROADCAST;
from.sin_port=htons(5050);
int fromlength=sizeof(SOCKADDR);
//用UDP初始化套接字
sock = WSASocketW(AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
// 设置该套接字为广播类型,
setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
// 把该套接字绑定在一个具体的地址上
bind(sock,(sockaddr *)&a,sizeof(sockaddr_in));
char buf[256] = {"Hello Client"};
while(1)
{
//从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的
recvfrom(sock,buf,256,0,(sockaddr*)&from,(int FAR *)&fromlength);
ULONG b = from.sin_addr.s_addr;
CString str;
str.Format(_T("%d.%d.%d.%d"), b & 0xff, (b >> 8) & 0xff, (b >> 16) & 0xff, b >> 24);//取IP地址
CString str_rev;
str_rev =buf;
str_rev += "\r\n";
str_rev += str;
::SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd, IDC_EDIT1, str_rev);
sendto( sock, buf, strlen(buf) + 1, 0, (struct sockaddr FAR *)&from, fromlength );
ZeroMemory(buf,256);
}
return 0;
}