18,363
社区成员




#include <WinSock2.h>
#pragma comment(lib, "WS2_32.lib")
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
WORD wVersionRequestion = MAKEWORD(2, 2);
if(0 != WSAStartup(wVersionRequestion, &wsaData))
{
cout<<"WSAStartup failed with error code:"<<GetLastError()<<endl;
return -1;
}
if(2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
{
cout<<"Socket version not supported."<<endl;
WSACleanup();
return -1;
}
SOCKADDR_IN addr;
SOCKADDR_IN from;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = INADDR_ANY;
addr.sin_port = htons(5050);
from.sin_family = AF_INET;
from.sin_addr.S_un.S_addr = INADDR_BROADCAST;
from.sin_port = htons(5050);
int len = sizeof(SOCKADDR);
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
if(INVALID_SOCKET == s)
{
cout<<"socket failed with error code: "<<WSAGetLastError()<<endl;
WSACleanup();
return -1;
}
int optval = 1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&optval, sizeof(optval));
if(SOCKET_ERROR == bind(s, (LPSOCKADDR)&addr, sizeof(SOCKADDR)))
{
cout<<"bind failed with error code: "<<WSAGetLastError()<<endl;
closesocket(s);
WSACleanup();
return -1;
}
char buf[256] = {0};
while(1)
{
recvfrom(s, buf, 256, 0, (LPSOCKADDR)&from, &len);
Sleep(1000);
cout<<buf<<endl;
}
WSACleanup();
return 0;
}
//udpserver主要代码:
void main()
{
SOCKET socket1;
InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(1000); ///监听端口
local.sin_addr.s_addr=INADDR_ANY; ///本机
socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof local);
while (1)
{
char buffer[1024]="\0";
printf("waiting for message from others-------------\n");
if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
{
printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
////给cilent发信息
sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);
}
Sleep(500);
}
closesocket(socket1);
}
//udpcilent主要代码:
void main()
{
SOCKET socket1;
InitWinsock();
struct sockaddr_in server;
int len =sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(1000); ///server的监听端口
server.sin_addr.s_addr=inet_addr("168.168.0.10"); ///server的地址
socket1=socket(AF_INET,SOCK_DGRAM,0);
while (1)
{
char buffer[1024]="\0";
printf("input message\n");
scanf("%s",buffer);
if (strcmp(buffer,"bye")==0)
break;
if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
{
if (recvfrom(socket1,
buffer,
sizeof buffer,
0,
(struct sockaddr*)&server,&len) != SOCKET_ERROR)
printf("rece from server:%s\n",buffer);
}
}
closesocket(socket1);
}