在windows平台下UDP协议的服务器实现
// 创建Socket
// 设置Socket的一些属性 比如IP地址,端口号
// 绑定
#include
"stdafx.h"
#include
<iostream>
#include
"winsock2.h"
#pragma
comment
(
lib
,
"WS2_32.lib"
)
using
namespace
std
;
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[])
{
WSADATA
wsaData
;
WSAStartup
(
MAKEWORD
( 2, 2 ), &
wsaData
);
// 创建Socket
SOCKET
RecvSocket
;
RecvSocket
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_UDP
);
// 设置Socket的一些属性 比如IP地址,端口号
sockaddr_in
RecvAddr
;
RecvAddr
.
sin_family
=
AF_INET
;
int
Port
= 27015;
RecvAddr
.
sin_port
=
htons
(
Port
);
RecvAddr
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
);
// 绑定
bind
(
RecvSocket
, (
SOCKADDR
*)&
RecvAddr
,
sizeof
(
RecvAddr
) );
cout
<<
"Receiving datagrams... ...."
<<
endl
;
char
RecvBuf
[1024];
int
BufLen
= 1024;
sockaddr_in
SenderAddr
;
int
SenderAddrSize
=
sizeof
(
SenderAddr
);
while
(1)
{
// 通过UDP协议 从客户端接收数据
// 通过UDP协议 从客户端接收数据
recvfrom
(
RecvSocket
,
RecvBuf
,
BufLen
, 0, (
SOCKADDR
*)&
SenderAddr
, &
SenderAddrSize
);
cout
<<
"Receiving Data "
<<
RecvBuf
<<
"From IP__"
<<
inet_ntoa
(
SenderAddr
.
sin_addr
)<<
" Port___"
<<
SenderAddr
.
sin_port
<<
endl
;
}
cout
<<
"Finish"
<<
endl
;
closesocket
(
RecvSocket
);
cout
<<
"Exiting"
<<
endl
;
WSACleanup
();
return
0;
}