当前位置: 技术问答>linux和unix
一个UDP接受的问题
来源: 互联网 发布时间:2015-04-24
本文导语: 我在服务器上接受UDP数据,当服务器启动的时候,第一次接受到客户段发送过来的数据是不能得到他的地址,当客户端第2次发送以后就可以得到正常的地址。 我的程序大概如下: int udp_listen_fd ; int create_udp_socket(vo...
我在服务器上接受UDP数据,当服务器启动的时候,第一次接受到客户段发送过来的数据是不能得到他的地址,当客户端第2次发送以后就可以得到正常的地址。
我的程序大概如下:
int udp_listen_fd ;
int create_udp_socket(void)
{
int ret ;
struct sockaddr_in serv_addr ;// myselfhost;
/* bint listen udp fd*/
BZERO(&serv_addr,sizeof(serv_addr)) ;
serv_addr.sin_family = AF_INET ;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
serv_addr.sin_port = htons(get_port());
udp_listen_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(-1 == udp_listen_fd){
return -1 ;
}
if(-1 == bind(udp_listen_fd, (struct sockaddr*)&serv_addr,sizeof(serv_addr)) ){
return -1;
}
return 0 ;
}
int udp_message_handle(int fd)
{
int ret ,sock_len;
char send_buf[1024] ;
struct sockaddr_in cli_addr ;
BZERO(&send_buf, sizeof(send_buf)) ;
ret = recvfrom(fd, &send_buf, sizeof(send_buf), 0, (struct sockaddr *)&cli_addr, &sock_len ) ;
if(ret
我的程序大概如下:
int udp_listen_fd ;
int create_udp_socket(void)
{
int ret ;
struct sockaddr_in serv_addr ;// myselfhost;
/* bint listen udp fd*/
BZERO(&serv_addr,sizeof(serv_addr)) ;
serv_addr.sin_family = AF_INET ;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
serv_addr.sin_port = htons(get_port());
udp_listen_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(-1 == udp_listen_fd){
return -1 ;
}
if(-1 == bind(udp_listen_fd, (struct sockaddr*)&serv_addr,sizeof(serv_addr)) ){
return -1;
}
return 0 ;
}
int udp_message_handle(int fd)
{
int ret ,sock_len;
char send_buf[1024] ;
struct sockaddr_in cli_addr ;
BZERO(&send_buf, sizeof(send_buf)) ;
ret = recvfrom(fd, &send_buf, sizeof(send_buf), 0, (struct sockaddr *)&cli_addr, &sock_len ) ;
if(ret