/*
************************************************************************
* Filename: udpserver.c
* Description:
* Version: 1.0
* Created: 2011年05月05日 09时56分04秒
* Revision: none
* Compiler: gcc
* Author: wenhao (wh), hnrain1004@gmail.com
* Company: sunplusapp
* ***********************************************************************
*/
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
string
.h
>
#include
<
unistd.h
>
#include
<
sys
/
socket.h
>
#include
<
netinet
/
in
.h
>
#include
<
arpa
/
inet.h
>
int
main(
int
argc,
char
*
argv[])
{
int
sockfd;
struct
sockaddr_in bindAddr;
//
定义IPV4地址变量
unsigned
short
port
=
8000
;
//
设定初始端口
sockfd
=
socket(AF_INET,SOCK_DGRAM,
0
);
//
创建UDP套接字
bzero(
&
bindAddr,
sizeof
(bindAddr));
//
对套接字地址清0
bindAddr.sin_family
=
AF_INET;
//
IPV4族
bindAddr.sin_port
=
htons(port);
//
将主机端口转换为网络端口
bindAddr.sin_addr.s_addr
=
htonl(INADDR_ANY);
//
本地IP地址
bind(sockfd,(
struct
sockaddr
*
)
&
bindAddr,
sizeof
(bindAddr));
//
套接字和地址绑定
while
(
1
)
{
char
recvBuf[
2048
];
//
用于存放收到的数据
size_t recvLen;
struct
sockaddr_in cliAddr;
//
定义IPV4地址变量
size_t cliAddrLen
=
sizeof
(cliAddr);
recvLen
=
recvfrom(sockfd,recvBuf,
2048
,
0
,(
struct
sockaddr
*
)
&
cliAddr,
&
cliAddrLen);
//
用于将接收到的数据存放在recvBuf中,客户端地址存放在cliAddr中
printf(
"
client IP = %s\n
"
,inet_ntoa(cliAddr.sin_addr));
//
显示发送数据的IP地址
sendto(sockfd, recvBuf,recvLen,
0
,(
struct
sockaddr
*
)
&
cliAddr,cliAddrLen);
//
将接收到的数据发送给客户端.
}
return
0
;
}
https://www.cnblogs.com/hnrainll/category/297419.html